2012-04-28 2 views
0

J'ai une application Android, et je veux qu'il ait deux vues qui sont similaires les uns aux autres. Par exemple:Dynamiquement choisir une vue dans l'application Android

<Button 
    android:id="@+id/ok" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_centerHorizontal="true" 
    android:text="OK" /> 

et

<Button 
    android:id="@+id/ok" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="OK" /> 

avis que le seul changement est que j'ai supprimé la ligne centerHorizontal. mais ceci est un exemple simplifié.

Maintenant, je veux créer une application, que parfois (ex-aléatoire en utilisant une func) utilise vue A et utilise parfois vue B.

Est-il possible de le faire « passer des vues » lors de l'exécution? Est-il possible de construire cette application en utilisant les deux vues (notez que le bouton doit avoir le même ID, je ne veux pas implémenter la logique deux fois)?

merci beaucoup!

+0

sûr que vous pouvez basculer entre les gravités, n'est-ce pas? –

Répondre

0

La seule façon que j'imagine de le faire est:

  • Ayant chaque bouton dans son propre fichier de mise en page. Gonflez le correspondant en fonction du résultat de votre fonction.
  • Ajoutez-le à la vue.

Exemple de code:

button_a.xml:

<?xml version="1.0" encoding="utf-8"?> 
<Button xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/ok" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_centerHorizontal="true" 
    android:text="OK" /> 

button_b.xml:

<?xml version="1.0" encoding="utf-8"?> 
<Button xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/ok" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="OK_2" /> 

Votre activité:

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    LayoutInflater inflater = LayoutInflater.from(this); 

    Button button; 

    if (Math.random() > 0.5) { 
     button = (Button) inflater.inflate(R.layout.button_a, null); 
    } else { 
     button = (Button) inflater.inflate(R.layout.button_b, null); 
    } 

    /* ... 
     Set listeners to the button and other stuff 
     ... 
    */ 

    //find the view to wich you want to append the button 
    LinearLayout view = (LinearLayout) this.findViewById(R.id.linearLayout1); 

    //append the button 
    view.addView(button); 
} 

Si vous voulez que cela se produise dynamiquement (c.-à-d. pas dans le onCreate, mais après une entrée de l'utilisateur) vous pouvez toujours retirer le bouton de la mise en page, et gonfler un nouveau choisi au hasard.

Espérons que cela aide!

Questions connexes