Si j'ai par exemple une mise en page vide comme celle-ci:
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>
Et une autre mise en page comme celle-ci:
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>
Je voudrais ajouter layout2.xml
à layout1.xml
par programme. J'aurais besoin de plusieurs versions différentes layout2.xml
que j'ajouterais quand je veux. Chacun aurait un texte différent sur TextView et les boutons.
Dans le cas d'une vue régulière Android View, je le ferais généralement de la même manière avec 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);
}
Comment puis-je le faire si je n'ai pas quelque chose de simple comme TextView ou Button, et si j'ai ma propre vue définie par XML?
Serait-il possible de mettre en quelque sorte toutes les vues à l'intérieur de l'adaptateur comme pour un ListView, puis de l'obtenir en cas de besoin et d'appeler simplement addView
sur ces vues?
Vous pouvez gonfler le fichier layout2.xml, modifier les textes et l'ajouter à la première mise en page:
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);
}
}
Vous voudrez peut-être modifier Android:layout_height
de la vue racine layout2.xml vers wrap_content
.
layout1 contient ScrollView comme disposition parent et LinearLayout principal comme enfant si aucun élément de ligne n'a plus de taille d'écran ScrollView gère l'élément de débordement avec défilement:
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>
Utilisez LayoutInflater pour ajouter un élément de ligne dans le LinearLayout parent:
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);
}
}
essayez cette méthode
ajouter un identifiant à la mise en page linearlayout1.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 création
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);