Alinear a la derecha el texto en Android TextView

215

Tengo un TextViewen mi solicitud. Quiero alinear el texto a la derecha. Intenté agregar:

android:gravity="right"

Pero esto no funciona para mí.

¿Qué podría estar haciendo mal?

Bishan
fuente

Respuestas:

193

Creo que estás haciendo esto: android:layout_width = "wrap_content"
si este es el caso, haz esto:android:layout_width = "match_parent"

un jugador justo
fuente
2
@Bishan fill llenará el resto del espacio, la coincidencia lo establecerá igual al ancho del padre
Troy Cosentino
11
En realidad, fill_parent y match_parent son lo mismo. El nombre se cambió a match_parent porque aparentemente fill_parent estaba confundiendo a las personas.
Edward Falk
158

En general, android:gravity="right"es diferente de android:layout_gravity="right".

El primero afecta la posición del texto en sí dentro de la Vista, por lo que si desea que esté alineado a la derecha, entonces layout_width=debe ser "fill_parent"o "match_parent".

El segundo afecta la posición de la Vista dentro de su padre, en otras palabras, alineando el objeto mismo (cuadro de edición o vista de texto) dentro de la vista padre.

wiztrail
fuente
83

La mejor solución es la más simple y la que modifica menos el comportamiento de su código .

¿Qué pasa si puede resolver este problema solo con 2 Propiedades en su TextView?

¿En lugar de necesitar cambiar sus LinearLayoutpropiedades que quizás puedan alterar el comportamiento de los LinearLayoutniños?

De esta manera, no necesita cambiar las LinearLayoutpropiedades y el comportamiento, solo necesita agregar las dos propiedades siguientes a su destino TextView:

android:gravity="right"
android:textAlignment="gravity"

¿Qué sería mejor cambiar solo su objetivo para resolver su solución en lugar de tener la oportunidad de causar otro problema en el futuro, modificando a su padre objetivo? Piénsalo :)

Paulo Roberto Rosa
fuente
Recibo un error que dice que no se encontró un identificador de recurso para el recurso 'textAlignment' en el paquete de Android.
Anu
¿Está seguro de que está accediendo a una TextViewpropiedad? - Puede consultar la propiedad desde la referencia aquí: developer.android.com/reference/android/view/…
Paulo Roberto Rosa
44
textAlignment se agregó en el nivel 17 de la API (Android 4.2). Su emulador / dispositivo deberá ejecutar 4.2+ para que esto funcione.
thanhtd
Intenté usar esta propiedad textAlignment en Android 4.1.2 y obtuve el error "No se encontró un identificador de recurso para el atributo 'textAlignment'". Encontré la respuesta para este error aquí stackoverflow.com/a/20176191/723507 . ¿Cómo podrías usarlo en 4.0.3?
thanhtd
20

android:layout_gravityse usa para alinear la vista de texto con respecto al diseño principal. android:gravityse usa para alinear el texto dentro de la vista de texto.

¿Está seguro de que está tratando de alinear el texto dentro de la vista de texto a la derecha o desea mover la vista de texto en sí a la derecha con respecto al diseño principal o está tratando de lograr ambos?

Rogerstone
fuente
Estoy tratando de alinear el texto dentro de la vista de texto a la derecha
Bishan
11

El siguiente fragmento de código:

android:textAlignment="textEnd"
android:layout_gravity="end"

funciona muy bien para mi

Fey Agape
fuente
11

En caso de que alguien todavía necesite

android:gravity="end"
npk
fuente
¿para qué es eso?
Gumuruh
En LTR, esto alinea el texto a la derecha y en RTL, a la izquierda
npk
8

Asegúrate de no estar usando android:layout_width="wrap_content"si es así, entonces no podrás establecer la gravedad porque no tienes suficiente espacio para que el texto se alinee. En lugar de usarandroid:layout_width="fill_parent"

Lalit Poptani
fuente
7
android:gravity="right"

Básicamente se usa en diseño lineal, por lo que debe establecer su ancho de TextView o EditText como

android:layout_width = "match_parent"

y

Cuando trabaje en Diseño relativo, use

android:layout_alignParentRight="true"
Kushal Ramola
fuente
5

Realice el (LinearLayout) android:layout_width="match_parent"y el TextView'sandroid:layout_gravity="right"

Augustus Francis
fuente
5

Si está adentro RelativeLayoutpuedes usarandroid:layout_toRightOf="@id/<id_of_desired_item>"

O

Si desea alinear a la rightesquina del dispositivo, el lugarandroid:layout_alignParentRight="true"

usuario2342517
fuente
4

Permítanme explicar el concepto de gravedad usando WEB porque muchos desarrolladores lo saben.

android_layout_gravity se comporta float:left|right|top|bottom

Mientras que android_gravitytrabajar comotext_align:centre|left|right

En Android float es android_layout_gravity y text_align: es android_gravity.

Y android_layout_gravity se aplica en relación con el padre. donde como android_gravity se aplica a su contenido secundario o interno.

Tenga en cuenta que android_gravity solo funciona cuando su vista es match_parent (cuando tiene espacio para centrar).

Zar E Ahmer
fuente
3

A continuación funciona para mí:

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

<TextView
    android:id="@+id/tv_distance"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignBottom="@+id/tv_username"
    android:layout_alignParentEnd="true"
    android:layout_toEndOf="@+id/tv_username"
    android:text="San Marco"
    android:textAlignment="viewEnd" />

Tenga en cuenta la configuración android:layout_alignParentEndy android:textAlignmentde la segunda TextView.

David Cheung
fuente
2

Puedes usar:

    android:layout_alignParentRight="true"
    android:layout_centerVertical="true"
Pablo
fuente
2

esto debería servir el propósito

android:textAlignment="textStart"

masoud cheragee
fuente
2

En mi caso, estaba usando Relative Layoutpara unemptyString

Después de luchar por esto durante una hora. Solo esto funcionó para mí:

android:layout_toRightOf="@id/welcome"
android:layout_toEndOf="@id/welcome"
android:layout_alignBaseline="@id/welcome"

layout_toRightOfo layout_toEndOfambos funcionan, pero para soportarlo mejor, utilicé ambos.

Para que quede más claro:

Esto era lo que estaba tratando de hacer:

ingrese la descripción de la imagen aquí

Y esta fue la salida del emulador

ingrese la descripción de la imagen aquí

Diseño:

<TextView
    android:id="@+id/welcome"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginStart="16dp"
    android:layout_marginTop="16dp"
    android:text="Welcome "
    android:textSize="16sp" />
<TextView
    android:id="@+id/username"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignBaseline="@id/welcome"
    android:layout_toRightOf="@id/welcome"
    android:text="@string/emptyString"
    android:textSize="16sp" />

Darse cuenta de:

  1. android:layout_width="wrap_content" trabajos
  2. Gravity no se usa
Rohit Sharma
fuente
1

También enfrenté el mismo problema y pensé que el problema estaba ocurriendo ya que el diseño_ancho de TextView tenía wrap_content. Debes tener layout_width como match_parent y android: gravity = "gravity"

Arup Saha
fuente
1
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="fill_parent"
     android:layout_height="fill_parent">

  <TextView
    android:id="@+id/tct_postpone_hour"
    android:layout_width="match_parent"
    android:layout_height="50dp"
    android:layout_centerHorizontal="true"
    android:layout_centerVertical="true"
    android:layout_gravity="center"
    android:gravity="center_vertical|center_horizontal"
    android:text="1"
    android:textSize="24dp" />
</RelativeLayout>

hace que el número uno se alinee en el centro, tanto horizontal como vertical.

Alp Altunel
fuente
0

intenta agregar android:gravity="center"aTextView

TheGreenGoblen
fuente
0

He usado el atributo "layout_alignRight" en mi caso, en el texto es:

android:layout_alignRight="@+id/myComponentId"

Si desea agregar un margen derecho, simplemente establezca el atributo "Layout_Margin Right" en "20dp" por ejemplo, en el texto es:

android:layout_marginRight="20dp"
Laurent
fuente