Comment aligner à droite le widget dans une disposition linéaire horizontale Android?

206

Voici le code que j'utilise et il ne fonctionne pas:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" 
    android:orientation="horizontal">

    <TextView android:text="TextView" android:id="@+id/textView1"
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content"
        android:gravity="right">
    </TextView>

</LinearLayout>
attention
la source

Réponses:

419

Essayez d'ajouter Viewun LinearLayoutélément horizontal avant vide que vous souhaitez voir à droite, par exemple:

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content" >

    <View
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:layout_weight="1" />                

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

</LinearLayout>
alcsan
la source
12
Cela marche! Mais n'importe qui peut expliquer pourquoi? Je ne pouvais pas totalement comprendre.
GMsoF du
29
La vue vide essaie de prendre le maximum d'espace, laissant de la place pour le bouton.
alcsan
14
Jusqu'à présent, cela a été la seule chose qui fonctionne pour moi en essayant d'avoir quelques boutons à gauche et un dernier bouton à droite. Mais c'est comme un hack pour moi. Existe-t-il une "bonne" façon de procéder?
IcedDante
8
C'est génial! Mais pourquoi gravity = "right" ne fonctionne pas de cette façon depuis le tout début? Pourquoi a-t-il besoin d'aide de cette autre vue? Et comment est-ce "bien", sinon, sans la vue supplémentaire?
afrish
1
Cela ne fonctionne pas dans une disposition de type grille - il n'y a pas d'espace vide. La solution de Sherif elKhatib fonctionne.
cdonner
119

Ne changez pas la gravité du LinearLayout sur "droite" si vous ne voulez pas que tout soit à droite.

Essayer:

  1. Changer la largeur de TextView enfill_parent
  2. Changez la gravité de TextView enright

Code:

    <TextView 
              android:text="TextView" 
              android:id="@+id/textView1"
              android:layout_width="fill_parent"
              android:layout_height="wrap_content"   
              android:gravity="right">
    </TextView>
Sherif elKhatib
la source
1
merci pour cela - c'est la largeur de fill_parent qui me
décourageait
2
La disposition linéaire est-elle même conçue pour y parvenir? Ne devrait-on pas simplement utiliser la disposition relative pour y parvenir? Cette solution n'est-elle pas un hack?
user2635088
cela ne fonctionnera pas si vous avez plusieurs contrôles TextView dans un LinearLayout. Voir la réponse de @alcsan
Felix
Cela devrait être la réponse acceptée. Cette approche n'utilise aucune vue supplémentaire et, plus important encore, elle n'utilise pas layout_weight qui affiche considérablement les performances en baisse.
Sermilion
android:layout_weight = "1"côte à côte avec android:gravity="right", devrait faire l'affaire.
Vassilis
63

En complément de la réponse d'alcsan, vous pouvez utiliser Spacedepuis l'API 14 (Android 4.0 ICE_CREAM_SANDWICH), un document ici .

L'espace est une sous-classe de vue légère qui peut être utilisée pour créer des espaces entre les composants dans les dispositions générales.

<?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="match_parent" 
    android:orientation="horizontal" >

    <Space
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:layout_weight="1" />

    <TextView
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content"
        android:text="TextView"
        android:gravity="right" />

</LinearLayout>

Pour les applications qui android.support.v4.widget.Spaceprennent en charge les niveaux d'API inférieurs à 14, il existe depuis Android Support Library r22.1.0.

Weekend
la source
L'important est que vous devez définir layout_weight = "1"
code4j
Fonctionne parfaitement! Préserve la largeur de chaque élément.
phatmann
Cela marche. Wow, la laideur d'Android ne cesse de m'étonner
Chris Neve
31

Avec disposition linéaire

<LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:background="@drawable/select_car_book_tabbar"
        android:gravity="right" >

        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_vertical"
            android:src="@drawable/my_booking_icon" />
    </LinearLayout>

entrez la description de l'image ici

avec FrameLayout

<FrameLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:background="@drawable/select_car_book_tabbar">

        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_vertical|right"
            android:src="@drawable/my_booking_icon" />
    </FrameLayout>

avec RelativeLayout

<RelativeLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:background="@drawable/select_car_book_tabbar">

        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentRight="true"
            android:layout_centerInParent="true"
            android:src="@drawable/my_booking_icon" />
    </RelativeLayout>
DeltaCap019
la source
21

régler la vue layout_weight="1"ferait l'affaire.!

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">

<TextView
    android:id="@+id/textView1"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_weight="1" />

<RadioButton
    android:id="@+id/radioButton1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"/>

Saad Mahmud
la source
2
Une solution aussi simple +1
Alex
1
Si quelqu'un cherche toujours, c'est la bonne solution :)
passatgt
C'est magique! Comment l'avez-vous découvert?
andreikashin
@andreikashin, envisagez un vote positif si cela a aidé. Merci.
Saad Mahmud
13

Ajoutez android:gravity="right"à LinearLayout. En supposant que le TextViewhaslayout_width="wrap_content"

Ronnie
la source
2
Il a spécifiquement dit d'aligner un seul composant à l'intérieur du LinearLayout. Pas la disposition linéaire elle-même: la disposition elle-même est définie sur fill_parent.
RichieHH
8

ajoutez simplement android:gravity="right"votre mise en page de revêtement.

Idrees Ashraf
la source
4

Je l'ai fait de la manière la plus simple:

Prenez simplement un RelativeLayout et placez votre vue enfant dedans, que vous souhaitez placer à droite .

    <LinearLayout
        android:id="@+id/llMain"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="#f5f4f4"
        android:gravity="center_vertical"
        android:orientation="horizontal"
        android:paddingBottom="20dp"
        android:paddingLeft="15dp"
        android:paddingRight="15dp"
        android:paddingTop="20dp">

        <ImageView
            android:id="@+id/ivOne"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@drawable/ic_launcher" />


        <TextView
            android:id="@+id/txtOne"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="20dp"
            android:text="Hiren"
            android:textAppearance="@android:style/TextAppearance.Medium"
            android:textColor="@android:color/black" />

        <RelativeLayout
            android:id="@+id/rlRight"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:gravity="right">


            <ImageView
                android:id="@+id/ivRight"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:padding="5dp"
                android:src="@drawable/ic_launcher" />

        </RelativeLayout>
    </LinearLayout>

J'espère que cela vous aidera.

Hiren Patel
la source
3

Vous devez utiliser un RelativeLayout et faites-les simplement glisser jusqu'à ce qu'il semble bon :)

    <ImageView
        android:id="@+id/button_info"
        android:layout_width="30dp"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_alignParentTop="true"
        android:layout_marginRight="10dp"
        android:contentDescription="@string/pizza"
        android:src="@drawable/header_info_button" />

</RelativeLayout>
detman
la source
2
"faites-les glisser" déconseillé pour les écrans multi-résolution
Moses Aprico
3

linear layoutavec layout_width="fill_parent"et aussi le widget avec même layout width+gravity as right l'alignerait à droite.

J'utilise 2 TextViews dans l'exemple suivant, topicTitleà gauche et topicQuestionsà droite.

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:paddingLeft="20dp"
        android:orientation="horizontal">

    <TextView
        android:id="@+id/topicTitle"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="18sp"
        android:textStyle="bold" />

    <TextView
        android:id="@+id/topicQuestions"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:gravity="right"
        android:textSize="18sp"
        android:textStyle="bold" />
    </LinearLayout>

</RelativeLayout>

Production

Prayagupd
la source
2

Essayez de changer la disposition_largeur en android:layout_width="match_parent"car il gravity:"right"aligne le texte à l'intérieur de la disposition_largeur, et si vous choisissez un contenu d'habillage, il n'a pas où aller, mais si vous choisissez le parent de correspondance, il peut aller vers la droite.

mrvinent
la source
2

Pas besoin d'utiliser une vue ou un élément supplémentaire:

// c'est tellement facile et simple

<LinearLayout
  android:layout_width="match_parent"
  android:layout_height="wrap_content"
  android:orientation="horizontal"
>

// c'est l'alignement à gauche

<TextView
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="No. of Travellers"
      android:textColor="#000000"
      android:layout_weight="1"
      android:textStyle="bold"
      android:textAlignment="textStart"
      android:gravity="start" />

// c'est l'alignement à droite

<TextView
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="Done"
      android:textStyle="bold"
      android:textColor="@color/colorPrimary"
      android:layout_weight="1"
      android:textAlignment="textEnd"
      android:gravity="end" />

</LinearLayout>
kamaljeet Singh
la source
0

Dans le cas de TextView:

<TextView 
    android:text="TextView" 
    android:id="@+id/textView"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"   
    android:gravity="right"
    android:textAlignment="gravity">    
</TextView>
Роман Елизаров
la source
0

L'ajout de vue est un peu difficile et il couvre toute la largeur de l'écran comme ceci:

<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content" >

<View
    android:layout_width="0dp"
    android:layout_height="0dp"
    android:layout_weight="1" />                

<Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" />

Essayez ce code:

<LinearLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="right"
    >

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Create Account"/>

</LinearLayout>
Zafar Iqbal
la source
-1

Voici un exemple. la clé pour organiser est la suivante

android:layout_width="0dp"
android:layout_weight="1"

Code complet

<?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:padding="5dp">

    <TextView
        android:id="@+id/categoryName"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="abcd" />

    <TextView
        android:id="@+id/spareName"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="efgh" />

</LinearLayout>

entrez la description de l'image ici

Rohit Mandiwal
la source
-1

Utilisez match_parent et la gravité pour définir le texte TextView à droite, comme ceci:

<?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="match_parent"
    android:orientation="horizontal">

    <TextView android:text="TextView" android:id="@+id/textView1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="right">
    </TextView>

</LinearLayout>
Guillermo Gonzalez
la source
-2

Essaye ça..

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" 
    android:orientation="horizontal" 
    android:gravity="right" >



    <TextView android:text="TextView" android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content">
    </TextView>

</LinearLayout>
Shubham
la source