138 votes

Bouton d'alignement à droite dans un LinearLayout horizontal

Si vous regardez l'image ci-jointe. J'ai besoin que mon bouton soit aligné à droite mais pour une raison quelconque, cela 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 ça ne marche pas ?

6 votes

Essayez la mise en page relative dans ce cas. LL ne fonctionnera pas,

4 votes

Si vous voulez utiliser LinearLayout, utilisez deux linearlayouts internes et utilisez layout_weight avec layout_gravity. Cela fonctionnera parfaitement.

0 votes

@VamsiChalla c'est possible avec un seul, regardez ma nouvelle réponse ci-dessous.

142voto

Dipak Keshariya Points 10749

Utilisez le code ci-dessous 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>

3 votes

Il semble que l'attribut "layout_alignParentRight" ne soit pas disponible pour le bouton dans ce cas ? Déprécié peut-être ?

22 votes

Utilisez-vous relativelayout au lieu de linearlayout ?

1 votes

Ah merde Désolé pour ça, j'ai complètement zappé. Merci !

30voto

BobbyD17 Points 160

Je sais que cette question a été posée il y a longtemps, mais je l'ai déjà fait et cela permet un meilleur contrôle de l'alignement des éléments. Il suffit d'imbriquer un autre LinearLayout qui contiendra votre bouton à l'intérieur. Vous pouvez ensuite modifier la gravité de la disposition du bouton et le faire aller vers la droite alors que le bouton TextView est toujours sur la 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>

Il se peut que vous deviez jouer avec le remplissage de la mise en page imbriquée pour qu'elle se comporte comme vous le souhaitez.

2 votes

Vous devez utiliser un FrameLayout pour votre mise en page imbriquée. Il sert à positionner un seul élément. Et aussi, donnez-lui un poids pour qu'il remplisse la bonne partie du parent. +1 pour ne pas utiliser Relative Layout de toute façon.

10voto

NagarjunaReddy Points 3638

Essayez celui-ci

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

7voto

goodm Points 2908

Vous devez ajouter la gravité à la disposition et non au 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">

3 votes

Cela n'alignerait-il pas le TextView à droite également ? J'ai juste besoin que le bouton soit aligné à droite...

1 votes

Si vous devez aligner uniquement un bouton, utilisez RelativeLayout.

1 votes

Même si vous voulez que tous les boutons soient alignés, cela ne fonctionne pas (API 16). Les vues enfants sont toujours alignées sur la gauche.

5voto

Anand S Joshi Points 1
<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

Prograide.com

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.

Powered by:

X