2010-08-11 3 views
5

Je souhaite créer une zone de saisie avec un bouton d'envoi vers la droite. Entre eux, ils devraient couvrir la largeur de l'écran. Actuellement, j'ai:LinearLayout rempli de droite à gauche

LinearLayout row= new LinearLayout(context); 
row.setOrientation(HORIZONTAL); 
row.setGravity(Gravity.RIGHT); 
EditText input = new EditText(context); 
Button submit = new Button(context); 
submit.setText("Submit"); 
row.addView(submit); 
row.addView(input,LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT); 
myView.addView(row,LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT); 

Il en résulte la distribution correcte de l'espace: le bouton Submit prendre autant de place que nécessaire, le bouton d'entrée en prenant l'espace restant, ils sont cependant le tour le mauvais sens (la soumettre le bouton est sur la gauche, malgré le réglage de la gravité). Si j'enlève la gravité et inverse l'ordre d'ajout des éléments à la ligne, la boîte de saisie occupe toute la largeur de l'écran et le bouton de soumission n'est pas visible. Qu'est-ce que je fais mal?

Répondre

4

Je dirais qu'il est préférable d'utiliser la mise en page et du lieu d'entrée à gauche du bouton. Mais si vous avez vraiment besoin de cette mise en page avec Linear vous pouvez simplement utiliser le paramètre de poids:

LinearLayout row= new LinearLayout(context); 
    EditText input = new EditText(context); 
    Button submit = new Button(context); 
    submit.setText("Submit"); 
    LayoutParams inputParams = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); 
    inputParams.weight = 1; 
    row.addView(input,inputParams); 
    LayoutParams buttonParams = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); 
    buttonParams.weight = 0; 
    row.addView(submit, buttonParams); 
+1

Et oui, je pense que ce n'est pas une bonne idée de former des mises en page à partir du code. Donc, ne le faites que si la mise en page xml n'est absolument pas possible pour votre cas. –

+0

Je suis encore relativement nouveau sur Android, et jusqu'ici tout dans ce projet est basé sur le code. Je vais utiliser xml dans de futurs projets, mais pour l'instant je vais prendre la solution de code. – fredley

0

Les éléments sont empilés dans un LinearLayout dans l'ordre dans lequel vous les avez ajoutés. Changez vos deux appels addView.

Il est généralement plus facile d'obtenir la bonne mise en page avec les fichiers xml de mise en page. À savoir:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="horizontal" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"> 
    <EditText 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content"/> 

    <Button 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content"/> 
</LinearLayout> 
+0

Hmmm. Il semble contre-intuitif que je devrais mettre la gravité à droite, alors les choses devraient empiler à partir de la gauche. Tant pis. – fredley

+0

Ce n'est pas ce que signifie la gravité: http://developer.android.com/reference/android/view/Gravity.html –

3

Essayez d'ajouter EditText la première mise à sa largeur fill parent et son poids à 1, puis sur le bouton (width = wrap content)

0

Si vous avez également besoin d'aligner les boutons sur la ligne suivante, vous pouvez également utiliser un TableLayout. Regardez l'apidemos pour l'exemple de code.

Questions connexes