2011-10-28 11 views
5

Ho trovato un semplice SwipeSample che ho modificato per permettermi di creare nuovi layout xml e gonfiare il layout principale per visualizzarli. Quello che volevo fare era anche essere in grado di aggiungere a livello di programmazione i layout per il processo di scorrimento.Il modo migliore per ingrandire la vista a livello di programmazione

Ho il layout main.xml e un red.xml e yellow.xml che sono un semplice linearlayout con un textview impostato su un colore solido.

Il codice seguente funziona ma non penso che sia corretto o il modo migliore per fare ciò che sto cercando di ottenere. Se qualcuno può suggerire un modo migliore che sarebbe molto apprezzato.

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    //Create a layout with a solid blue background programmatically 
    TextView tv1 = new TextView(this); 
    tv1.setText("Blue"); 
    tv1.setBackgroundColor(Color.BLUE); 
    tv1.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT)); 

    LinearLayout ll = new LinearLayout(this); 
    ll.setOrientation(LinearLayout.VERTICAL); 
    ll.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT)); 
    ll.addView(tv1); 
    //Create a layout with a solid green background programmatically 
    TextView tv2 = new TextView(this); 
    tv2.setText("Green"); 
    tv2.setBackgroundColor(Color.GREEN); 
    tv2.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT)); 

    LinearLayout ll2 = new LinearLayout(this); 
    ll2.setOrientation(LinearLayout.VERTICAL); 
    ll2.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT)); 
    ll2.addView(tv2); 
    //inflate the flipper view and add the yellow and red xml layouts and also the 2 programmatically created layouts 
    fSpace = (ViewFlipper)findViewById(R.id.flipper); 
    inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    inflater.inflate(R.layout.yellow, fSpace); 
    inflater.inflate(R.layout.red, fSpace); 
    fSpace.addView(ll); 
    fSpace.addView(ll2); 

} 

risposta

2

Il modo di gonfiare R.layout.yellow e R.layout.red è davvero il modo giusto per farlo. Potresti essere in grado di semplificare il tuo codice spostandolo molto su xml. Immagino che tv1 sia solo un esempio? in caso contrario, potrebbe andare in main.xml. Potresti anche trovare un modo per creare giallo e rosso con una singola inflazione ... a seconda di cosa stai facendo.

La creazione di viste a livello di programmazione è, per la maggior parte, leggermente noiosa.

4

Se si dispone di un layout complesso che si desidera creare a livello di codice, potrebbe essere più semplice avere il layout premesso in xml e quindi solo gonfiarlo e aggiungerlo in fase di runtime.

Crea vista in xml

Ecco un file XML di layout premade campione che si trova nella cartella layout. Il tuo potrebbe essere qualsiasi cosa, una singola vista o un intero complesso layout.

layout/my_view.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/LinearLayout1" 
    android:orientation="vertical" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:id="@+id/TextView1" 
     android:text="This is a TV"/> 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:id="@+id/TextView2" 
     android:text="How are you today?"/> 
</LinearLayout> 

Fai un contenitore per la visualizzazione

avere qualche posto ha messo la visualizzazione nel layout attività. Potresti avere qualcosa di simile.

<FrameLayout 
    android:id="@+id/flContainer" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content"> 

</FrameLayout> 

gonfiare la vista

Utilizzare ottenere un riferimento al contenitore, gonfiare il vista da XML e quindi aggiungerlo al contenitore.

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    FrameLayout container = (FrameLayout) findViewById(R.id.flContainer); 
    View inflatedLayout= getLayoutInflater().inflate(R.layout.my_view, null, false); 
    container.addView(inflatedLayout); 

} 

Fare in questo modo mantiene il codice molto più pulito.

Consulta anche:

Problemi correlati