Aller au contenu

[Résolu] Problème de weight dans les LinearLayout


Nikya

Recommended Posts

[Résolu] : Combiner un layout_weight avec layout_height="0dp"

Bonjour,

Je ne comprend pas le comportement du LinearLayout et ses weight dans le cas où un de ses sous composant est un autre layout.

En pièce jointe une illustration de mon problème.

Dans le cas de gauche :

J'ai 3 bouton dans un LinearLayout vertical

Le poids que je leur ai mis correspond à la mise en page que je veux :

  • Bouton A : 3
  • Bouton B : 6
  • Bouton C : 1

Dans le cas de droite :

J'ai remplacé le bouton B par un sous layout un RelativeLayout

J'ai gardé la même répartition de poids

  • Bouton A : 3
  • Bouton B LinearLayout : 6
  • Bouton C : 1

Je devrait avoir la même mise en page non ?

Pourquoi le faite d'ajouter du contenue à mon sous-layout influe sans raison sur mon LinearLayout principale ?

Je suis débutant en dev Android donc mon incompréhension peut être toute bête.

Merci d'Avance de vos réponses.

Code de gauche

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/LinearLayout1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity" >
<Button
 android:id="@+id/buttonA"
 android:layout_width="match_parent"
 android:layout_height="wrap_content"
 android:layout_weight="3"
 android:text="Button A" />
<Button
 android:id="@+id/buttonB"
 android:layout_width="match_parent"
 android:layout_height="wrap_content"
 android:layout_weight="6"
 android:text="Button B" />
<Button
 android:id="@+id/buttonC"
 android:layout_width="match_parent"
 android:layout_height="wrap_content"
 android:layout_weight="1"
 android:text="Button C" />
</LinearLayout>

Code de droite

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/LinearLayout1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity" >
<Button
 android:id="@+id/buttonA"
 android:layout_width="match_parent"
 android:layout_height="wrap_content"
    android:layout_weight="3"
 android:text="Button A" />
<RelativeLayout
 android:layout_width="match_parent"
 android:layout_height="wrap_content"
 android:layout_weight="6" >
 <Button
	 android:id="@+id/buttonB1"
	 android:layout_width="match_parent"
	 android:layout_height="wrap_content"
	 android:layout_alignParentLeft="true"
	 android:layout_centerVertical="true"
	 android:text="Button B1" />
 <Button
	 android:id="@+id/buttonB2"
	 android:layout_width="wrap_content"
	 android:layout_height="wrap_content"
	 android:layout_alignParentBottom="true"
	 android:layout_alignParentRight="true"
	 android:text="Button B2" />
</RelativeLayout>
<Button
 android:id="@+id/buttonC"
 android:layout_width="match_parent"
 android:layout_height="wrap_content"
 android:layout_weight="1"
 android:text="Button C" />
</LinearLayout>

Lien vers le commentaire
Partager sur d’autres sites

Quand on utilise des poids (weight) dans un LinearLayout, il est préférable de positionner la dimension correspondante du composant à 0dp (sinon, parfois ça marche, parfois, ça marche pas...)

Donc, dans ton cas, tu devrais mettre à 0dp les layout_height de tes trois boutons dans le premier cas, ou des deux boutons et du RelativeLayout dans le second cas (d'ailleurs dans ce cas, dans ton exemple, le premier bouton n'a pas de poids, mais une hauteur indiquée en absolu !!! )

Lien vers le commentaire
Partager sur d’autres sites

En effet en positionnant le layout_height à 0dp j'obtient le comportement que je souhaite.

Comportement pas très intuitifs par contre je trouve.

Merci @chpil !!

d'ailleurs dans ce cas, dans ton exemple, le premier bouton n'a pas de poids, mais une hauteur indiquée en absolu !!!

Oui erreur de manipulation pour la construction de mon exemple (j'ai modifié mon post initial). :emo_im_undecided:

Lien vers le commentaire
Partager sur d’autres sites

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×
×
  • Créer...