android - addView no funciona
admob android (4)
Probablemente he leído todas las publicaciones y documentación, pero aún no puedo resolver este problema.
Quiero usar el método addView () para agregar vista al diseño existente (en ejecución), pero por alguna razón no puedo. Sé que esto debería ser fácil y básico, pero aún así no puedo hacerlo. Entonces, por favor ayúdame.
Aquí hay un código:
LinearLayout layout = (LinearLayout)findViewById(R.id.mainLayout);
TextView text=new TextView(this);
text.setText("test");
layout.addView(text);
Eso es un código, y el resultado es que solo he mostrado las vistas que están definidas en el archivo xml. No hay esta nueva vista que he agregado. Cuando depuro veo esta vista agregada como un elemento secundario del padre al que la agregué pero no se muestra.
Aquí está main.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:ads="http://schemas.android.com/apk/lib/com.google.ads"
android:id="@+id/mainLayout"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:background="@drawable/main1" >
<TextView android:id="@+id/app_title"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textColor="#FFF"
android:text="@string/app_title"
android:textSize="25dp"
android:gravity="center_horizontal"/>
<TextView android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
android:text="@string/main_screen_counter_title"
android:textSize="15dp"
android:textColor="#FFF"
android:gravity="center_horizontal"/>
<TextView android:id="@+id/frontScreenCounter"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textColor="#FFF"
android:text="@string/reading"
android:textSize="33dp"
android:gravity="center_horizontal" />
<GridView android:id="@+id/gridview"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:columnWidth="90dp"
android:numColumns="3"
android:verticalSpacing="10dp"
android:horizontalSpacing="10dp"
android:stretchMode="columnWidth"
android:gravity="center"
android:textColor="#888"
/>
</LinearLayout>
Por favor ayuda. ¡Esto me volverá loco!
No lo recuerdo, pero quizás haya algún método de "actualización" para volver a cargar el diseño.
Pruebe layout.invalidate ();
Olvidó especificar los LayoutParameters
para la vista recién agregada.
LinearLayout layout = (LinearLayout)findViewById(R.id.mainLayout);
TextView text=new TextView(this);
text.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
text.setText("test");
layout.addView(text);
EDITAR
El GridView
con un id de @+id/gridview
se define con una altura de diseño de fill_parent
, lo que le deja sin espacio para agregar una nueva vista. Cambiar su altura a wrap_content
puede resolver su problema.
Agregando mi comentario a esta publicación para ayudar a otros a verificar fácilmente la solución.
Su contenido linearLayout está sobre la vista de los padres. por lo que necesita utilizar ScrollView. Me gusta esto:
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:ads="http://schemas.android.com/apk/lib/com.google.ads"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<LinearLayout
android:id="@+id/mainLayout"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="@drawable/main1"
android:orientation="vertical">
<TextView
android:id="@+id/app_title"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:text="@string/app_title"
android:textColor="#FFF"
android:textSize="25dp" />
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
android:gravity="center_horizontal"
android:text="@string/main_screen_counter_title"
android:textColor="#FFF"
android:textSize="15dp" />
<TextView
android:id="@+id/frontScreenCounter"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:text="@string/reading"
android:textColor="#FFF"
android:textSize="33dp" />
<GridView
android:id="@+id/gridview"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:columnWidth="90dp"
android:gravity="center"
android:horizontalSpacing="10dp"
android:numColumns="3"
android:stretchMode="columnWidth"
android:textColor="#888"
android:verticalSpacing="10dp" />
</LinearLayout>
</ScrollView>
Tuve el mismo problema y desperdicié varias veces encontrando la razón.
Mi culpa fue que estaba agregando un CustomView que tenía match_parent establecido como alto.
Espero ahorrar un tiempo precioso a cualquiera que haya cometido este tonto error molesto :)
TextView tv = new TextView(this);
lytMarks.addView(tv);
CustomView cv = new CustomView(this, someObject);
lytMarks.addView(cv); // <-- This one had height = match_parent!!
EditText et = new EditText(this);
lytMarks.addView(et);