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);