web-dev-qa-db-fra.com

Bouton d'alignement à droite dans LinearLayout horizontal

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" ...

Cancel Add

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?!

114
Tiwaz89

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>
125
Dipak Keshariya

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 Viewsi 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.

106
TWiStErRob

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.

22
BobbyD17

Véritable solution à ce cas:  

Android:layout_weight="1" pour TextView, et votre bouton se déplace vers la droite!

18
nicolas asinovich

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>
10
NagarjunaReddy

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>
8
Barb
<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

5
Anand S Joshi

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">
5
goodm

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. 

2
Stephanie Gu

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>
1
velraj

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. 

0
Farhan Ghaffar

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é.

0
Juanjo

Vous pouvez utiliser RelativeLayout ou définir gravity = "right" dans la présentation parent de votre Button.

0
HuynhHan

J'ai utilisé une disposition similaire avec 4 TextViews. Deux TextViews devraient être alignés à gauche et deux TextViews 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>
0
Vamsi Challa