Alinhar o texto à direita no Android TextView

215

Eu tenho um TextViewna minha aplicação. Eu quero alinhar o texto nele à direita. Eu tentei adicionar:

android:gravity="right"

Mas isso não funciona para mim.

O que eu posso estar fazendo de errado?

Bishan
fonte

Respostas:

193

Eu acho que você está fazendo isso: android:layout_width = "wrap_content"
Se este for o caso, faça o seguinte:android:layout_width = "match_parent"

um jogador justo
fonte
2
O preenchimento @Bishan preencherá o restante do espaço, a correspondência será igual à largura do pai
Troy Cosentino
11
Na verdade, fill_parent e match_parent são a mesma coisa. O nome foi alterado para match_parent porque aparentemente fill_parent estava confundindo as pessoas.
Edward Falk
158

Em geral, android:gravity="right"é diferente de android:layout_gravity="right".

O primeiro afeta a posição do texto em si na Visualização, portanto, se você deseja que ele esteja alinhado à direita, layout_width=deve ser "fill_parent"ou "match_parent".

O segundo afeta a posição da Visualização dentro de seu pai, em outras palavras - alinhando o próprio objeto (caixa de edição ou exibição de texto) dentro da exibição pai.

wiztrail
fonte
83

A melhor solução é a mais simples e a que menos modifica seu comportamento no código .

E se você puder resolver esse problema apenas com 2 Propriedades no seu TextView?

Em vez de precisar alterar suas LinearLayoutpropriedades, talvez isso possa alterar o comportamento das LinearLayoutcrianças?

Dessa forma, você não precisa alterar as LinearLayoutpropriedades e o comportamento; você só precisa adicionar as duas seguintes propriedades ao seu destino TextView:

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

O que seria melhor mudar apenas seu objetivo para resolver sua solução, em vez de ter a chance de causar outro problema no futuro, modificando seu pai-alvo? pense nisso :)

Paulo Roberto Rosa
fonte
Eu recebo um erro dizendo que nenhum identificador de recurso encontrado para o recurso 'textAlignment' no pacote android.
Anu
Você tem certeza de que está acessando uma TextViewpropriedade? - Você pode verificar a propriedade da referência aqui: developer.android.com/reference/android/view/...
Paulo Roberto Rosa
4
O textAlignment foi adicionado no nível 17 da API (Android 4.2). Seu emulador / dispositivo precisará estar executando 4.2+ para que isso funcione.
thanhtd
Tentei usar esta propriedade textAlignment no Android 4.1.2 e recebi o erro "Nenhum identificador de recurso encontrado para o atributo 'textAlignment'". Encontrei a resposta para este erro aqui stackoverflow.com/a/20176191/723507 . Como você pode usá-lo na 4.0.3?
thanhtd
20

android:layout_gravityé usado para alinhar a exibição de texto em relação ao layout pai. android:gravityé usado para alinhar o texto dentro da visualização de texto.

Tem certeza de que está tentando alinhar o texto dentro da visualização de texto para a direita ou deseja mover a visualização de texto para a direita em relação ao layout pai ou está tentando obter os dois

Rogerstone
fonte
eu estou tentando alinhar o texto dentro da exibição de texto para a direita
Bishan
11

O seguinte trecho de código:

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

funciona muito bem para mim

Fey Agape
fonte
11

Caso alguém ainda precise

android:gravity="end"
npk
fonte
para que é isso?
gumuruh
No LTR, isso alinha o texto à direita e no RTL, à esquerda
npk
8

Certifique-se de que não está usando, android:layout_width="wrap_content"caso contrário, não será possível definir a gravidade, pois não há espaço suficiente para o texto se alinhar. Em vez disso, useandroid:layout_width="fill_parent"

Lalit Poptani
fonte
7
android:gravity="right"

É basicamente usado no Layout Linear, então você precisa definir sua largura do TextView ou do EditText como

android:layout_width = "match_parent"

e

Quando estiver trabalhando no layout relativo, use

android:layout_alignParentRight="true"
Kushal Ramola
fonte
5

Crie o (LinearLayout) android:layout_width="match_parent"e o TextViewandroid:layout_gravity="right"

Augustus Francis
fonte
5

Se estiver, RelativeLayoutvocê pode usarandroid:layout_toRightOf="@id/<id_of_desired_item>"

Ou

Se você deseja alinhar ao rightcanto do dispositivo, o localandroid:layout_alignParentRight="true"

user2342517
fonte
4

Deixe-me explicar o conceito de gravidade usando WEB, porque muitos desenvolvedores estão cientes disso.

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

Considerando que android_gravitytrabalhar comotext_align:centre|left|right

No Android float é android_layout_gravity e text_align: is android_gravity.

E android_layout_gravity se aplica em relação ao pai. onde android_gravity se aplica ao seu filho ou conteúdo interno.

Nota android_gravity só funciona quando sua View é match_parent (quando tem espaço para centralizar).

Zar E Ahmer
fonte
3

Abaixo funciona para mim:

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

Observe as configurações android:layout_alignParentEnde android:textAlignmentdo segundo TextView.

David Cheung
fonte
2

Você pode usar:

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

isso deve servir ao propósito

android:textAlignment="textStart"

masoud Cheragee
fonte
2

No meu caso, eu estava usando Relative Layoutpor umemptyString

Depois de lutar sobre isso por uma hora. Só isso funcionou para mim:

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

layout_toRightOfou layout_toEndOfambos funcionam, mas, para apoiá-lo melhor, usei os dois.

Para deixar mais claro:

Era isso que eu estava tentando fazer:

insira a descrição da imagem aqui

E essa foi a saída do emulador

insira a descrição da imagem aqui

Layout:

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

Notar que:

  1. android:layout_width="wrap_content" trabalho
  2. Gravity não é usado
Rohit Sharma
fonte
1

Também enfrentei o mesmo problema e percebi que o problema estava acontecendo, pois a largura do layout do TextView estava tendo wrap_content. Você precisa ter layout_width como match_parent e o android: gravity = "gravity"

Arup Saha
fonte
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>

faz o número um alinhar no centro, horizontal e vertical.

Alp Altunel
fonte
0

tente adicionar android:gravity="center"emTextView

TheGreenGoblen
fonte
0

Eu usei o atributo "layout_alignRight" no meu caso, no texto é:

android:layout_alignRight="@+id/myComponentId"

Se você deseja adicionar uma margem certa, basta definir o atributo "Layout_Margin Right" como "20dp", por exemplo, no texto:

android:layout_marginRight="20dp"
Laurent
fonte