¿Cómo alinear a la derecha el widget en un diseño lineal horizontal Android?


206

Este es el código que estoy usando y no funciona:

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

Respuestas:


419

Intente agregar un elemento vacío Viewdentro de la horizontal LinearLayoutantes del elemento que desea ver a la derecha, por ejemplo:

<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
¡Esto funciona! ¿Pero alguien puede explicar por qué? No pude entender totalmente.
— GMsoF

29
Vista vacía intenta ocupar la máxima cantidad de espacio, dejando espacio para el botón.
— alcsan

14
Hasta ahora, esto ha sido lo único que me funciona al tratar de tener algunos botones a la izquierda y un botón final a la derecha. Pero se siente como un truco para mí. ¿Hay una forma "correcta" de hacer esto?
— IcedDante

8
¡Esto es asombroso! Pero, ¿por qué gravity = "right" no funciona de esta manera desde el principio? ¿Por qué necesita ayuda de esta otra vista? ¿Y cómo es "correcto", si no es así, sin la vista adicional?
— Afrish

1
Esto no funciona en un diseño de cuadrícula: no hay espacio vacío. La solución de Sherif elKhatib funciona.
— cdonner

119

No cambie la gravedad de LinearLayout a "right" si no desea que todo esté a la derecha.

Tratar:

  1. Cambiar el ancho de TextView afill_parent
  2. Cambiar la gravedad de TextView aright

Código:

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

1
gracias por esto - fue el ancho de fill_parent lo que me estaba desanimando
— dldnh

2
¿El diseño lineal incluso está diseñado para lograr esto? ¿No debería uno simplemente usar el diseño relativo para lograr esto? ¿Esta solución no es un truco?
— user2635088

esto no funcionará si tiene múltiples controles TextView en un LinearLayout. Ver respuesta de @alcsan
— Felix el

Esta debería ser la respuesta aceptada. Este enfoque no utiliza vistas adicionales y, lo que es más importante, no utiliza layout_weight que reduce considerablemente el rendimiento.
— Sermilion

android:layout_weight = "1"lado a lado con android:gravity="right", debería hacer el truco.
— Vassilis

63

Como complemento a la respuesta de alcsan, puede usarlo Spacedesde API 14 (Android 4.0 ICE_CREAM_SANDWICH), documente aquí .

El espacio es una subclase de Vista liviana que puede usarse para crear espacios entre componentes en diseños de propósito general.

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

Para las aplicaciones que admiten niveles de API inferiores a 14, existe una android.support.v4.widget.Spacebiblioteca de soporte de Android r22.1.0.


Es importante que necesite configurar layout_weight = "1"
— code4j

¡Funciona perfectamente! Conserva el ancho de cada elemento.
— phatmann

Esto funciona. Wow, la fealdad de Android nunca deja de sorprenderme
— Chris Neve

31

Con diseño lineal

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

ingrese la descripción de la imagen aquí

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

con 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

configurar la vista layout_weight="1"haría el truco.

<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
Una solución tan simple +1
— Alex

1
Si alguien sigue buscando, esta es la solución correcta :)
— passatgt

¡Esto es magia! ¿Cómo lo descubriste?
— andreikashin

@andreikashin, considere un voto positivo si ayudó. Gracias.
— Saad Mahmud

13

Añadir android:gravity="right"a LinearLayout. Asumiendo que TextViewtienelayout_width="wrap_content"


2
Específicamente dijo que alinee un solo componente dentro del LinearLayout. No es el diseño lineal en sí: el diseño en sí está configurado en fill_parent.
— RichieHH


4

Lo he hecho de la manera más fácil:

Simplemente tome un RelativeLayout y coloque la vista de su hijo en él, que desea colocar en el lado derecho .

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

Espero que te ayude.


3

Deberías usar un RelativeLayout y simplemente arrastrarlos hasta que se vea bien :)

    <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
"arrastrarlos" no recomendado para pantallas de resolución múltiple
— Moses Aprico

3

linear layoutcon layout_width="fill_parent"y también el widget con el mismo layout width+ gravity as rightlo alinearía a la derecha.

Estoy usando 2 TextViews en el siguiente ejemplo, topicTitlea la izquierda y topicQuestionsa la derecha.

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

Salida


2

Intente cambiar el layout_width a android:layout_width="match_parent"porque gravity:"right"alinea el texto dentro del layout_width, y si elige ajustar el contenido, no tiene a dónde ir, pero si elige match parent, puede ir a la derecha.


2

No es necesario usar ninguna vista o elemento adicional:

// eso es tan fácil y sencillo

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

// esto es alineación izquierda

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

// esta es la alineación correcta

<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

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

Agregar vista es un poco difícil y cubre todo el ancho de pantalla de esta manera:

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

Intenta con este código:

<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

Aquí hay una muestra. la clave para organizar es la siguiente

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

Código completo

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

ingrese la descripción de la imagen aquí


-1

Use match_parent y gravity para establecer el texto TextView a la derecha, así:

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

Prueba esto..

<?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>
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.