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