¿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>
Wareeye
fuente

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>
alcsan
fuente
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>
Sherif elKhatib
fuente
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.

Fin de semana
fuente
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>
DeltaCap019
fuente
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"/>

Saad Mahmud
fuente
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"

Ronnie
fuente
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
8

simplemente agregue android:gravity="right"su diseño de línea.

Idrees Ashraf
fuente
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.

Hiren Patel
fuente
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>
detman
fuente
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

prayagupd
fuente
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.

mrvinent
fuente
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>
kamaljeet Singh
fuente
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>
Роман Елизаров
fuente
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>
Zafar Iqbal
fuente
-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í

Rohit Mandiwal
fuente
-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>
Guillermo Gonzalez
fuente
-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>
Shubham
fuente