284 votes

Mise en page linéaire et poids dans Android

J'ai toujours lu cette drôle de valeur de poids dans les documentations Android. Maintenant je veux l'essayer pour la première fois mais ça ne fonctionne pas du tout.

D'après ce que je comprends des documentations, cette disposition :

  <LinearLayout
     android:layout_width="fill_parent"
     android:layout_height="wrap_content"
     android:orientation="horizontal">

     <Button
        android:text="Register"
        android:id="@+id/register"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:padding="10dip"
        weight="1" />

     <Button
        android:text="Not this time"
        android:id="@+id/cancel"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:padding="10dip"
        weight="1" />

  </LinearLayout>

devrait créer deux boutons qui sont alignés horizontalement et partagent l'espace de manière égale. Le problème est que les deux boutons ne grandissent pas pour remplir l'espace. Le résultat ressemble à ceci :

alt text

Je voudrais que les boutons grandissent et remplissent toute la ligne. Si les deux boutons sont configurés pour remplir le parent, seul le premier bouton est affiché et remplit toute la ligne.

733voto

Anke Points 4060

3 choses à retenir :

  • fixer le Android:layout_width des enfants à "0dp"
  • fixer le Android:poidsSomme du parent ( éditer : comme l'a remarqué Jason Moore, cet attribut est facultatif, car par défaut il est défini par la somme layout_weight des enfants)
  • fixer le Android:layout_weight de chaque enfant proportionnellement (par exemple, weightSum="5", trois enfants : layout_weight="1", layout_weight="3", layout_weight="1")

Exemple :

    <LinearLayout
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:weightSum="5">

    <Button
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="1" />

    <Button
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="3"
        android:text="2" />

    <Button
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="3" />

    </LinearLayout>

Et le résultat :

Layout weight example

171voto

jeremynealbrown Points 7588

Je pense avoir trouvé le problème. Vous ne réglez pas le poids_mise en page propriété. Votre code est le suivant poids="1" et il faut lire Android:layout_weight="1" .

56voto

Manoj Seelan Points 231

C'est android:layout_weight . Le poids ne peut être utilisé que dans LinearLayout . Si l'orientation de linearlayout est Vertical, alors utilisez android:layout_height="0dp" et si l'orientation est horizontale, alors utilisez android:layout_width = "0dp" . Il fonctionnera parfaitement.

18voto

jqpubliq Points 7677

Essayez de définir le layout_width des deux boutons sur "0dip" et le poids des deux boutons sur 0,5.

7voto

Rakesh Soni Points 913

LinearLayout permet d'attribuer un poids aux enfants individuels. Cet attribut attribue un poids " importance La valeur "poids" est attribuée à une vue et lui permet de s'étendre pour remplir tout l'espace restant dans la vue parent. Le poids par défaut est de zéro

calcul pour attribuer tout Restant/Extra espace entre les enfants. (pas l'espace total)

espace attribué à l'enfant = (poids individuel de l'enfant) / (somme des poids de tous les enfants de Linear Layout)

Exemple (1) : s'il y a trois zones de texte et que deux d'entre elles déclarent un poids de 1, tandis que la troisième ne reçoit aucun poids (0), alors Restant/Extra espace attribué à

1st text box = 1/(1+1+0) 
2nd text box = 1/(1+1+0) 
3rd text box = 0/(1+1+0) 

Exemple (2) Disons que nous avons une étiquette de texte et deux éléments d'édition de texte dans une rangée horizontale. L'étiquette n'a pas de layout_weight spécifié, elle occupe donc l'espace minimum nécessaire au rendu. Si le layout_weight de chacun des deux éléments d'édition de texte est fixé à 1, la largeur restante dans la mise en page parente sera répartie de manière égale entre eux (car nous affirmons qu'ils sont d'importance égale).

calculation : 
1st label = 0/(0+1+1) 
2nd text box = 1/(0+1+1) 
3rd text box = 1/(0+1+1)

Si la première zone de texte a un layout_weight de 1 et la deuxième zone de texte un layout_weight de 2, alors un tiers de l'espace restant sera attribué à la première et deux tiers à la deuxième (parce que nous prétendons que la deuxième est plus importante).

calculation : 
1st label = 0/(0+1+2) 
2nd text box = 1/(0+1+2) 
3rd text box = 2/(0+1+2)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X