2014-11-25 4 views
15

Se io per esempio ho il layout vuoto come questo:Aggiungere più visualizzazioni personalizzate per il layout di programmazione

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> 

e alcuni altri layout in questo modo:

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> 

Vorrei aggiungere layout2.xml a layout1.xml p rogrammatically. Avrei bisogno di avere più versioni diverse layout2.xml che aggiungerei quando voglio. Ognuno avrebbe un testo diverso su TextView e pulsanti.

In caso di regolare Android View Io di solito farlo allo stesso modo come questa 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); 
} 

Come posso farlo se non ho qualcosa di semplice come TextView o il pulsante, e se ho la mia vista definita xml?

Sarebbe possibile in qualche modo inserire tutte le viste all'interno dell'adattatore come per un ListView e quindi ottenerlo quando necessario e chiamare semplicemente addView su quelle Visualizzazioni?

+0

Usa LayoutInflator per fare questo Vedi http://stackoverflow.com/questions/2335813/how-to-inflate -una-vista-con-un-layout – user3917131

risposta

32

si può gonfiare il file layout2.xml, modificare i testi, e aggiungerlo al primo layout:

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

si può decidere di cambiare android:layout_height della vista radice layout2.xml a wrap_content.

7

Layout1 contengono ScrollView come layout di genitore e LinearLayout principale, come figlio, se nessun elemento fila più dimensioni dello schermo elemento di overflow maniglia ScrollView con scorrimento:

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> 

Usa LayoutInflater aggiungere fila elemento in linea LinearLayout:

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); 
    } 
} 
+0

come accedere a tutti i pulsanti al di fuori della vista? –

+0

Provare a ottenere child da my_linear_layout o aggiungere tutti i pulsanti fanno riferimento a un elenco di array. –

+0

Il bambino specificato ha già un genitore, per favore chiama removeView() –

2

provare questo metodo

Aggiungi ID 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> 

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