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>

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>

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>

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.


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>

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


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"


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.


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.


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>

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


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.


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>

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>

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>

-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


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

-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>
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.