Je lis toujours à propos de cette valeur de poids amusante dans les documentations Android. Maintenant, je veux l'essayer pour la première fois, mais ça ne marche pas du tout.
D'après ce que je comprends des documentations, cette mise en page:
<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 alignés horizontalement et partageant l’espace de manière égale. Le problème est que les deux boutons ne poussent pas pour remplir l'espace.
Je voudrais que les boutons grandissent et remplissent toute la ligne. Si les deux boutons sont définis pour correspondre au parent, seul le premier bouton est affiché et remplit toute la ligne.
Vous ne définissez pas la propriété layout_weight
. Votre code lit weight="1"
et il devrait lire Android:layout_weight="1"
.
3 choses à retenir:
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:
C'est Android:layout_weight
. Le poids ne peut être utilisé que dans LinearLayout
. Si l'orientation de la représentation linéaire est Vertical, utilisez Android:layout_height="0dp"
et si l'orientation est horizontale, utilisez Android:layout_width = "0dp"
. Cela fonctionnera parfaitement.
Cette image résume la mise en page linéaire.
Vous pouvez suivre ce lien pour plus d'informations sur le sujet. Just Maths - Vues, groupes de vues et mises en page
Didacticiel vidéo pour la mise en page linéaire: largeur, hauteur et poids
Essayez de régler le layout_width
des deux boutons sur "0dip" et le weight
des deux boutons sur 0.5
.
Dans le champ largeur du bouton, remplacez wrap-content
par 0dp
.
Utilise l'attribut layout_weight d'une vue.
Android:layout_width="0dp"
Voici à quoi ressemblera votre code:
<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="0dp"
Android:layout_height="wrap_content"
Android:padding="10dip"
Android:layout_weight="1" />
<Button
Android:text="Not this time"
Android:id="@+id/cancel"
Android:layout_width="0dp"
Android:layout_height="wrap_content"
Android:padding="10dip"
Android:layout_weight="1" />
</LinearLayout>
layout_weight est utilisé pour répartir l’espace restant en proportions. Dans ce cas, les deux boutons prennent "0dp" en largeur. Ainsi, l’espace restant sera divisé en une proportion de 1: 1, c’est-à-dire que l’espace sera divisé de manière égale entre les vues de boutons.
LinearLayout permet d'attribuer un poids à des enfants individuels. Cet attribut attribue une valeur "importance" à une vue et lui permet de se développer pour remplir tout espace restant dans la vue parent. Le poids par défaut est zéro
calcul pour affecter n'importe quel Restant/Extra espace entre enfants. (pas l'espace total)
espace assigné à l'enfant = (poids individuel de l'enfant)/(somme du poids de chaque enfant dans la disposition linéaire)
Exemple (1): s'il y a trois zones de texte et que deux d'entre elles déclarent un poids de 1, alors que le troisième n'a pas de poids (0), alors Restant/Extra = espace assigné à
1st text box = 1/(1+1+0)
2nd text box = 1/(1+1+0)
3rd text box = 0/(1+1+0)
Exemple (2): supposons que nous ayons une étiquette de texte et deux éléments d'édition de texte dans une ligne horizontale. Le libellé ne spécifiant pas layout_weight, il occupe donc l'espace minimum requis pour le rendu. Si la valeur pondérale de chacun des deux éléments d'édition de texte est définie sur 1, la largeur restante de la présentation parent sera divisée en parts égales entre eux (car nous affirmons qu'ils sont tout aussi importants).
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 que la deuxième zone de texte a un layout_weight de 2, un tiers de l'espace restant sera attribué à la première et les deux tiers à la seconde (car nous affirmons que le second est plus important).
calculation :
1st label = 0/(0+1+2)
2nd text box = 1/(0+1+2)
3rd text box = 2/(0+1+2)
Comme réponse de @ Manoj Seelan
Remplacez Android:layout_weight
par Android:weight
.
Lorsque vous utilisez Poids avec LinearLayout
. vous devez ajouter weightSum
dans LinearLayout
et selon l'orientation de votre LinearLayout
, vous devez définir 0dp
pour Largeur/Hauteur à toutes les vues de LinearLayout
` Enfants
Exemple :
Si L'orientation de Linearlayout
est Vertical
, puis définissez la largeur de toutes les vues d'enfants de LinearLayout
avec 0dp
<LinearLayout
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:orientation="vertical"
Android:weightSum="3">
<Button
Android:text="Register"
Android:id="@+id/register"
Android:layout_width="0dp"
Android:layout_height="wrap_content"
Android:padding="10dip"
Android:layout_weight="2" />
<Button
Android:text="Not this time"
Android:id="@+id/cancel"
Android:layout_width="0dp"
Android:layout_height="wrap_content"
Android:padding="10dip"
Android:layout_weight="1" />
</LinearLayout>
Si l'orientation Linearlayout
sur est horizontal
, alors définissez la hauteur de toutes les vues de LinearLayout
`s avec 0dp
.
<LinearLayout
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:orientation="horizontal"
Android:weightSum="3">
<Button
Android:text="Register"
Android:id="@+id/register"
Android:layout_width="wrap_content"
Android:layout_height="0dp"
Android:padding="10dip"
Android:layout_weight="2" />
<Button
Android:text="Not this time"
Android:id="@+id/cancel"
Android:layout_width="wrap_content"
Android:layout_height="0dp"
Android:padding="10dip"
Android:layout_weight="1" />
</LinearLayout>
Peut-être que définir les deux propriétés du bouton layout_width sur "fill_parent" fera l'affaire.
Je viens de tester ce code et cela fonctionne dans l'émulateur:
<LinearLayout Android:layout_width="fill_parent"
Android:layout_height="wrap_content">
<Button Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:layout_weight="1"
Android:text="hello world"/>
<Button Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:layout_weight="1"
Android:text="goodbye world"/>
</LinearLayout>
Assurez-vous de définir layout_width sur "fill_parent" sur les deux boutons.
<LinearLayout
xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:id="@+id/logonFormButtons"
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:baselineAligned="true"
Android:orientation="horizontal">
<Button
Android:id="@+id/logonFormBTLogon"
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:text="@string/logon"
Android:layout_weight="0.5" />
<Button
Android:id="@+id/logonFormBTCancel"
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:text="@string/cancel"
Android:layout_weight="0.5" />
</LinearLayout>
Tu dois écrire comme ça sa travaille pour moi
<LinearLayout
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:orientation="horizontal"
Android:weightSum="2">
<Button
Android:text="Register"
Android:id="@+id/register"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:padding="10dip"
Android:layout_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"
Android:layout_weight="1" />
De plus, vous devez ajouter ceci Android:layout_width="0dp"
pour les vues d'enfants [Vues de bouton] de LinerLayout
Dans le code XML ci-dessus, définissez le Android:layout_weight
de la présentation linéaire sur 2
: Android:layout_weight="2"
Vous trouverez ci-dessous les modifications (marquées entre BOLD) dans votre code:
<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="0dp" //changes made here
Android:layout_height="wrap_content"
Android:padding="10dip"
Android:layout_weight="1" /> //changes made here
<Button
Android:text="Not this time"
Android:id="@+id/cancel"
Android:layout_width="0dp" //changes made here
Android:layout_height="wrap_content"
Android:padding="10dip"
Android:layout_weight="1" /> //changes made here
</LinearLayout>
Puisque votre LinearLayout a une orientation horizontale, vous devez donc conserver votre largeur uniquement sous la forme 0dp. pour pouvoir utiliser des poids dans cette direction. (Si votre orientation était verticale, vous n'auriez gardé que votre hauteur 0dp) .
Puisqu'il y a 2 vues et que vous avez placé Android:layout_weight="1"
pour les deux vues, cela signifie que les deux vues seront divisées de manière égale dans le sens horizontal (ou en largeur).
<LinearLayout
Android:layout_width="fill_parent"
Android:layout_height="wrap_content">
<Button
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:layout_weight="2"
Android:text="Button 1" />
<Button
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:layout_weight="3"
Android:text="Button 2" />
<Button
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:layout_weight="2"
Android:text="Button 3" />
</LinearLayout>
Remplacez wrap_content
par fill_parent
.
<LinearLayout
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:layout_gravity="center"
Android:background="#008">
<RelativeLayout
Android:id="@+id/paneltamrin"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:layout_weight="1"
Android:gravity="center"
>
<Button
Android:id="@+id/BtnT1"
Android:layout_width="wrap_content"
Android:layout_height="150dp"
Android:drawableTop="@Android:drawable/ic_menu_edit"
Android:drawablePadding="6dp"
Android:padding="15dp"
Android:text="AndroidDhina"
Android:textColor="#000"
Android:textStyle="bold" />
</RelativeLayout>
<RelativeLayout
Android:id="@+id/paneltamrin2"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:layout_weight="1"
Android:gravity="center"
>
<Button
Android:layout_width="wrap_content"
Android:layout_height="150dp"
Android:drawableTop="@Android:drawable/ic_menu_edit"
Android:drawablePadding="6dp"
Android:padding="15dp"
Android:text="AndroidDhina"
Android:textColor="#000"
Android:textStyle="bold" />
</RelativeLayout>
</LinearLayout>
C'est la réponse parfaite à votre problème
<LinearLayout
xmlns:Android="http://schemas.Android.com/apk/res/Android"
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>