studio programacion para móviles español edición desarrollo desarrollar curso aprende aplicaciones android xml android-layout android-custom-view

android - programacion - Agregue múltiples vistas personalizadas al diseño mediante programación.



manual programacion android español pdf (3)

Si por ejemplo tengo un diseño vacío como este:

layout1.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > </LinearLayout>

Y algún otro diseño como este:

layout2.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="horizontal" > <TextView android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="TextView 1" /> <Button android:id="@+id/button2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Button 2" /> <Button android:id="@+id/button3" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Button 3" android:layout_weight="1"/> </LinearLayout>

Me gustaría agregar layout2.xml a layout1.xml programación. Necesitaría tener varias versiones diferentes de layout2.xml que agregaría cuando quisiera. Cada uno tendría un texto diferente en TextView y botones.

En el caso de la vista normal de Android, normalmente lo haría de forma similar con addView :

public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); TextView tv1 = new TextView(this); tv1.setText("HELLO"); my_linear_layout.addView(tv1); Button btn2 = new Button(this); bt2.setText("WORLD"); my_linear_layout.addView(btn2); }

¿Cómo puedo hacerlo si no tengo algo simple como TextView o Button, y si tengo mi propia vista xml definida?

¿Sería posible poner todas las vistas dentro del adaptador como para un ListView y luego obtenerlo cuando sea necesario y simplemente llamar a addView en esas vistas?


Puede inflar el archivo layout2.xml, editar los textos y agregarlo al primer diseño:

public class MyActivity extends Activity { private ViewGroup mLinearLayout; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.layout1); mLinearLayout = (ViewGroup) findViewById(R.id.linear_layout); addLayout("This is text 1", "This is first button", "This is second Button"); } private void addLayout(String textViewText, String buttonText1, String buttonText2) { View layout2 = LayoutInflater.from(this).inflate(R.layout.layout2, mLinearLayout, false); TextView textView = (TextView) layout2.findViewById(R.id.button1); Button button1 = (Button) layout2.findViewById(R.id.button2); Button button2 = (Button) layout2.findViewById(R.id.button3); textView1.setText(textViewText); button1.setText(buttonText1); button2.setText(buttonText2); mLinearLayout.addView(layout2); } }

Puede cambiar android:layout_height de la vista raíz de wrap_content a wrap_content .


layout1 contiene ScrollView como diseño principal y LinearLayout principal como elemento secundario si no hay elemento de fila más tamaño de pantalla ScrollView controla el elemento de desbordamiento con desplazamiento:

layout1.xml

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <LinearLayout android:id="@+id/my_linear_layout" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical"> </LinearLayout> </ScrollView>

Use LayoutInflater para agregar un elemento de fila en LinearLayout principal:

private LinearLayout my_linear_layout; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.layout1); my_linear_layout = (LinearLayout) findViewById(R.id.my_linear_layout); for(int i=1;i<=5;i++){ View view = LayoutInflater.from(this).inflate(R.layout.layout2,null); TextView button1 = (TextView) view.findViewById(R.id.button1); Button button2 = (Button) view.findViewById(R.id.button2); TextView button3 = (TextView) view.findViewById(R.id.button3); button1.setText("HELLO " + i); button2.setText("HELLO "+i); button3.setText("HELLO "+i); my_linear_layout.addView(view); } }


prueba este método

agregar id a linearlayout layout1.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/firstlayout" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > </LinearLayout>

En oncreate

LinearLayout firstlayout=(LinearLayout)findviewbyId(R.id.firstlayout); LinearLayout secondlayoout=(LinearLayout)this.getLayoutInflater().inflate(R.layout.layout2,null); //inflating view from xml TextView btn1=(TextView)secondlayoout.findviewbyId(R.id.button1); btn1.settext("TEST"); firstlayout.addview(secondlayoout);