Si vous regardez l'image ci-jointe. J'ai besoin que mon bouton soit correctement aligné, mais pour une raison quelconque, il ne fonctionne pas avec "Gravity: right" ...
Voici mon code pour cette mise en page:
<LinearLayout
xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:orientation="horizontal"
Android:layout_marginTop="35dp">
<TextView
Android:id="@+id/lblExpenseCancel"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:text="@string/cancel"
Android:textColor="#404040"
Android:layout_marginLeft="10dp"
Android:textSize="20sp"
Android:layout_marginTop="9dp" />
<Button
Android:id="@+id/btnAddExpense"
Android:layout_width="wrap_content"
Android:layout_height="45dp"
Android:background="@drawable/stitch_button"
Android:layout_marginLeft="10dp"
Android:text="@string/add"
Android:layout_gravity="right"
Android:layout_marginRight="15dp" />
</LinearLayout>
Pourquoi ne fonctionne pas?!
Utiliser le code suivant pour cela
<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:layout_marginTop="35dp"
Android:orientation="horizontal" >
<TextView
Android:id="@+id/lblExpenseCancel"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_marginLeft="10dp"
Android:layout_marginTop="9dp"
Android:text="@string/cancel"
Android:textColor="#404040"
Android:textSize="20sp" />
<Button
Android:id="@+id/btnAddExpense"
Android:layout_width="wrap_content"
Android:layout_height="45dp"
Android:layout_alignParentRight="true"
Android:layout_marginLeft="10dp"
Android:layout_marginRight="15dp"
Android:background="@drawable/stitch_button"
Android:text="@string/add" />
</RelativeLayout>
Solution unique LinearLayout
. Ajouter uniquement une vue d'espacement simple:
(Personne ne semblait avoir mentionné celui-ci, seulement des solutions plus complexes multi-agencements.)
<LinearLayout
xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:orientation="horizontal"
Android:layout_marginTop="35dp">
<TextView
Android:id="@+id/lblExpenseCancel"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:text="@string/cancel"
Android:textColor="#404040"
Android:layout_marginLeft="10dp"
Android:textSize="20sp"
Android:layout_marginTop="9dp" />
<!------------------------- ADDED SPACER VIEW -------------------->
<View
Android:layout_width="0dp"
Android:layout_height="0dp"
Android:layout_weight="1"
/>
<!------------------------- /ADDED SPACER VIEW -------------------->
<Button
Android:id="@+id/btnAddExpense"
Android:layout_width="wrap_content"
Android:layout_height="45dp"
Android:background="@drawable/stitch_button"
Android:layout_marginLeft="10dp"
Android:text="@string/add"
Android:layout_gravity="right"
Android:layout_marginRight="15dp" />
</LinearLayout>
Notez la vue "en surbrillance", je n'ai rien modifié d'autre. Height = 0 s'assure que ce n'est pas visible. Largeur = 0, car la largeur est déterminée par la LinearLayout
en fonction du poids = 1. Cela signifie que la vue d'espacement s'étendra autant que possible dans la direction (orientation) de LinearLayout
.
Notez que vous devez utiliser Android.widget.Space
ou Android.support.v4.widget.Space
au lieu de View
si votre niveau d'API et/ou vos dépendances le permettent. Space
accomplit le travail de façon moins coûteuse, car elle mesure et n'essaie pas de dessiner quoi que ce soit comme View
le fait; c'est aussi plus expressif pour véhiculer l'intention.
Je sais que cette question a été posée il y a quelque temps, mais je l'ai déjà fait et cela permet de mieux contrôler l'alignement des éléments. Si vous le considérez comme une programmation Web, cela aide. Vous venez d'imbriquer une autre LinearLayout
qui contiendra votre bouton à l'intérieur. Vous pouvez ensuite modifier la gravité de la disposition du bouton et le faire passer à droite, alors que la variable TextView
est toujours à gauche.
Essayez ce code:
<LinearLayout
xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:orientation="horizontal"
Android:layout_marginTop="35dp">
<TextView
Android:id="@+id/lblExpenseCancel"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:text="@string/cancel"
Android:textColor="#404040"
Android:layout_marginLeft="10dp"
Android:textSize="20sp"
Android:layout_marginTop="9dp"/>
<LinearLayout
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:gravity="right"
Android:orientation="horizontal" >
<Button
Android:id="@+id/btnAddExpense"
Android:layout_width="wrap_content"
Android:layout_height="45dp"
Android:background="@drawable/stitch_button"
Android:layout_marginLeft="10dp"
Android:text="@string/add"
Android:layout_gravity="right"
Android:layout_marginRight="15dp"/>
</LinearLayout>
Vous devrez peut-être jouer avec le remplissage de la mise en page imbriquée pour qu'elle agisse comme vous le souhaitez.
Véritable solution à ce cas:
Android:layout_weight="1"
pour TextView, et votre bouton se déplace vers la droite!
essaye celui-là
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="fill_parent"
Android:layout_gravity="right"
Android:layout_height="wrap_content"
Android:orientation="horizontal" >
<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:orientation="horizontal" >
<TextView
Android:id="@+id/lblExpenseCancel"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_marginLeft="10dp"
Android:layout_marginTop="9dp"
Android:text="cancel"
Android:textColor="#ffff0000"
Android:textSize="20sp" />
<Button
Android:id="@+id/btnAddExpense"
Android:layout_width="wrap_content"
Android:layout_height="45dp"
Android:layout_alignParentRight="true"
Android:layout_marginLeft="10dp"
Android:layout_marginRight="15dp"
Android:textColor="#ff0000ff"
Android:text="add" />
</RelativeLayout>
</LinearLayout>
Comme mentionné plusieurs fois auparavant: Pour passer de LinearLayout à RelativeLayout, vous pouvez également résoudre le problème au lieu de l'éviter. Utilisez les outils fournis par LinearLayout: Donnez à TextView un poids = 1 (voir le code ci-dessous), le poids de votre bouton doit rester égal à 0 ou nul. Dans ce cas, TextView utilisera tout l’espace restant, ce qui n’est pas utilisé pour afficher le contenu de votre TextView ou ButtonView et pousse votre bouton à droite.
<LinearLayout
xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:orientation="horizontal"
Android:layout_marginTop="35dp">
<TextView
Android:id="@+id/lblExpenseCancel"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:text="@string/cancel"
Android:textColor="#404040"
Android:layout_marginLeft="10dp"
Android:textSize="20sp"
Android:layout_marginTop="9dp"
**Android:layout_weight="1"**
/>
<Button
Android:id="@+id/btnAddExpense"
Android:layout_width="wrap_content"
Android:layout_height="45dp"
Android:background="@drawable/stitch_button"
Android:layout_marginLeft="10dp"
Android:text="@string/add"
Android:layout_gravity="right"
Android:layout_marginRight="15dp" />
</LinearLayout>
<LinearLayout
xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:orientation="horizontal"
Android:layout_marginTop="35dp">
<TextView
Android:id="@+id/lblExpenseCancel"
Android:layout_width="0dp"
Android:layout_weight="0.5"
Android:layout_height="wrap_content"
Android:text="@string/cancel"
Android:textColor="#404040"
Android:layout_marginLeft="10dp"
Android:textSize="20sp"
Android:layout_marginTop="9dp"/>
<Button
Android:id="@+id/btnAddExpense"
Android:layout_width="0dp"
Android:layout_weight="0.5"
Android:layout_height="wrap_content"
Android:background="@drawable/stitch_button"
Android:layout_marginLeft="10dp"
Android:text="@string/add"
Android:layout_gravity="right"
Android:layout_marginRight="15dp"/>
</LinearLayout>
Cela résoudra votre problème
Vous devez ajouter de la gravité à la mise en page, pas le bouton, la gravité dans les paramètres du bouton est pour le texte à l'intérieur du bouton
<LinearLayout
xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="fill_parent"
Android:layout_gravity="right"
Android:layout_height="wrap_content"
Android:orientation="horizontal"
Android:layout_marginTop="35dp">
Si vous ne voulez pas ou ne pouvez pas utiliser RelativeLayout, vous pouvez envelopper le bouton dans un LinearLayout avec une orientation "verticale" et une largeur "fill_parent".
<LinearLayout
xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:orientation="horizontal"
Android:layout_marginTop="35dp">
<TextView
Android:id="@+id/lblExpenseCancel"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:text="@string/cancel"
Android:textColor="#404040"
Android:layout_marginLeft="10dp"
Android:textSize="20sp"
Android:layout_marginTop="9dp" />
<LinearLayout
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:orientation="vertical">
<Button
Android:id="@+id/btnAddExpense"
Android:layout_width="wrap_content"
Android:layout_height="45dp"
Android:background="@drawable/stitch_button"
Android:layout_marginLeft="10dp"
Android:text="@string/add"
Android:layout_gravity="right"
Android:layout_marginRight="15dp" />
</LinearLayout>
</LinearLayout>
En effet, si l'orientation de LinearLayout est horizontale, la gravité n'affectera que les vues verticalement. Et si l'orientation est 'verticale', la gravité n'affectera que les vues horizontalement. Voir ici pour plus de détails sur l'explication de l'orientation/gravité de LinearLayout.
Il suffit d’ajouter Android: gravity = "right" cette disposition parentale cela fonctionnera.
<LinearLayout
Android:id="@+id/withdrawbuttonContainer"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:layout_alignParentBottom="true"
Android:background="@color/colorPrimary"
Android:orientation="horizontal"
**Android:gravity="right"**
Android:weightSum="5"
Android:visibility="visible">
<Button
Android:id="@+id/bt_withDraw"
Android:layout_width="0dp"
Android:layout_height="wrap_content"
Android:layout_weight="1"
Android:text="@string/BTN_ADD"
app:delay="1500" />
<Button
Android:id="@+id/btn_orderdetail_amend"
Android:layout_width="0dp"
Android:layout_height="wrap_content"
Android:layout_weight="1"
Android:text="@string/BTN_CANCEL"
app:delay="1500" />
</LinearLayout>
Vous devez utiliser le paramètre Relativelayout au lieu de Linearlayout comme disposition principale. Si vous utilisez Relativelayout comme principal, manipulez facilement le bouton situé à droite, car la disposition relative nous fournit alignParent à droite, à gauche, en haut et en bas.
Je sais que c'est vieux, mais en voici un autre dans une mise en page linéaire:
<LinearLayout
xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:orientation="horizontal"
Android:layout_marginTop="35dp">
<TextView
Android:id="@+id/lblExpenseCancel"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:text="@string/cancel"
Android:textColor="#404040"
Android:layout_marginLeft="10dp"
Android:textSize="20sp"
Android:layout_marginTop="9dp" />
<Button
Android:id="@+id/btnAddExpense"
Android:layout_width="wrap_content"
Android:layout_height="45dp"
Android:background="@drawable/stitch_button"
Android:layout_marginLeft="10dp"
Android:text="@string/add"
Android:layout_gravity="center_vertical|bottom|right|top"
Android:layout_marginRight="15dp" />
S'il vous plaît noter la mise en page_gravity par opposition à seulement la gravité.
Vous pouvez utiliser RelativeLayout ou définir gravity = "right" dans la présentation parent de votre Button.
J'ai utilisé une disposition similaire avec 4 TextView
s. Deux TextView
s devraient être alignés à gauche et deux TextView
s devraient être alignés à droite. Donc, voici ma solution, si vous voulez utiliser LinearLayouts
seul.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:orientation="horizontal"
Android:baselineAligned="false"
Android:padding="10dp" >
<LinearLayout
Android:layout_width="0dip"
Android:layout_weight="0.50"
Android:layout_height="match_parent"
Android:gravity="left"
Android:orientation="horizontal" >
<TextView
Android:id="@+id/textview_fragment_mtfstatus_level"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:text="@string/level"
Android:textAppearance="?android:attr/textAppearanceMedium" />
<TextView
Android:id="@+id/textview_fragment_mtfstatus_level_count"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:text=""
Android:textAppearance="?android:attr/textAppearanceMedium" />
</LinearLayout>
<LinearLayout
Android:layout_width="0dip"
Android:layout_weight="0.50"
Android:layout_height="match_parent"
Android:gravity="right"
Android:orientation="horizontal" >
<TextView
Android:id="@+id/textview_fragment_mtfstatus_time"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:text="@string/time"
Android:textAppearance="?android:attr/textAppearanceMedium"
/>
<TextView
Android:id="@+id/textview_fragment_mtfstatus_time_count"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:text=""
Android:textAppearance="?android:attr/textAppearanceMedium"
/>
</LinearLayout>
</LinearLayout>