Je ne comprends pas comment utiliser cet attribut. Quelqu'un peut-il m'en dire plus ?
Jusqu'à ce que vous mentionniez la hauteur de 0px !
Je ne comprends pas comment utiliser cet attribut. Quelqu'un peut-il m'en dire plus ?
Avec layout_weight
vous pouvez spécifier un rapport de taille entre plusieurs vues. Par exemple, vous avez une MapView
et un table
qui devrait afficher des informations supplémentaires sur la carte. La carte doit utiliser les 3/4 de l'écran et le tableau doit utiliser 1/4 de l'écran. Ensuite, vous définirez le layout_weight
de la map
à 3 et le layout_weight
de la table
à 1.
Pour que cela fonctionne, vous devez également régler la hauteur ou la largeur (en fonction de votre orientation) sur 0px.
Vous avez besoin du 0px. Exemple : vous voulez mettre en place un tableau avec deux colonnes de taille égale. Chaque ligne du tableau est une mise en page linéaire horizontale avec deux "cellules de tableau" (par exemple, des TextViews), chacune ayant layout_weight=.5. Si vous spécifiez layout_width="wrap_content" sur les "cellules de tableau", la largeur du contenu sera ajoutée à la largeur calculée par layout_weight, les cellules de tableau auront toutes des tailles différentes et les colonnes ne seront pas alignées correctement. Vous devez donc définir layout_width=0dp pour qu'Android utilise uniquement layout_weight pour calculer la largeur des cellules.
En un mot, layout_weight
spécifie la part de l'espace supplémentaire de la mise en page à allouer à la vue.
LinearLayout permet d'attribuer un poids aux enfants individuels. Cet attribut attribue une valeur d'"importance" à une vue, et lui permet de s'étendre pour remplir tout espace restant dans la vue parent. Le poids par défaut des vues est de zéro.
En général, la formule est :
espace attribué à l'enfant = (poids individuel de l'enfant) / (somme des poids de tous les enfants de Linear Layout)
S'il y a trois zones de texte et que deux d'entre elles ont un poids de 1, tandis que la troisième n'a aucun poids (0), l'espace restant est attribué comme suit :
1ère zone de texte = 1/(1+1+0)
2ème zone de texte = 1/(1+1+0)
3ème zone de texte = 0/(1+1+0)
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é, afin qu'il occupe le minimum d'espace 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).
Calcul :
1ère étiquette = 0/(0+1+1)
2ème zone de texte = 1/(0+1+1)
3ème zone de texte = 1/(0+1+1)
Si, au lieu de cela, la première zone de texte a une valeur de layout_weight
de 1, et la deuxième zone de texte a une valeur de layout_weight
de 2, alors un tiers de l'espace restant sera donné au premier, et deux tiers au second (parce que nous prétendons que le second est plus important).
Calcul :
1ère étiquette = 0/(0+1+2)
2ème zone de texte = 1/(0+1+2)
3ème zone de texte = 2/(0+1+2)
Il y a l'explication simple (que j'apprécie) et les détails minutieux (que j'apprécie d'une manière différente). Ce sont toutes deux de bonnes réponses.
Comme mentionné ailleurs, android:layout_width="0px"
est important. De plus, les poids n'ont pas besoin d'être des entiers.
layout_weight
indique à Android comment distribuer votre View
dans un LinearLayout
. Android calcule alors d'abord la proportion totale nécessaire pour tous les View
qui ont un poids spécifié et place chaque View
en fonction de la fraction de l'écran dont il a spécifié avoir besoin. Dans l'exemple suivant, Android voit que l'écran TextView
ont un layout_weight
de 0
(c'est la valeur par défaut) et le EditText
ont un layout_weight
de 2
chacun, tandis que les Button
a un poids de 1
. Android alloue donc "juste assez" d'espace pour afficher tvUsername
y tvPassword
et divise ensuite le reste de la largeur de l'écran en 5 parties égales, dont deux sont attribuées à etUsername
, deux à etPassword
et la dernière partie à bLogin
:
<LinearLayout android:orientation="horizontal" ...>
<TextView android:id="@+id/tvUsername"
android:text="Username"
android:layout_width="wrap_content" ... />
<EditText android:id="@+id/etUsername"
android:layout_width="0dp"
android:layout_weight="2" ... />
<TextView android:id="@+id/tvPassword"
android:text="Password"
android:layout_width="wrap_content" />
<EditText android:id="@+id/etPassword"
android:layout_width="0dp"
android:layout_weight="2" ... />
<Button android:id="@+id/bLogin"
android:layout_width="0dp"
android:layout_weight="1"
android:text="Login"... />
</LinearLayout>
On dirait :
et
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.