Allinea il testo a destra in Android TextView


215

Ho un TextViewnella mia domanda. Voglio allineare il testo in esso a destra. Ho provato ad aggiungere:

android:gravity="right"

Ma questo non funziona per me.

Cosa potrei fare di sbagliato?

Risposte:


193

Penso che tu stia facendo questo: android:layout_width = "wrap_content"
se questo è il caso, fai questo:android:layout_width = "match_parent"


2
@Bishan fill riempirà il resto dello spazio, match lo imposterà uguale alla larghezza del genitore
Troy Cosentino,

11
In realtà, fill_parent e match_parent sono la stessa cosa. Il nome è stato cambiato in match_parent perché apparentemente fill_parent stava confondendo le persone.
Edward Falk,

158

In generale, android:gravity="right"è diverso da android:layout_gravity="right".

Il primo influenza la posizione del testo stesso all'interno della Vista, quindi se vuoi che sia allineato a destra, allora layout_width=dovrebbe essere uno "fill_parent"o "match_parent".

Il secondo influenza la posizione della Vista all'interno del suo genitore, in altre parole - allineando l'oggetto stesso (casella di modifica o vista di testo) all'interno della vista principale.


83

La soluzione migliore è quella più semplice e quella che modifica meno il comportamento del codice .

E se riesci a risolvere questo problema solo con 2 Proprietà sul tuo TextView?

Invece di dover modificare le tue LinearLayoutproprietà che forse possono alterare il comportamento dei LinearLayoutbambini?

In questo modo, non è necessario modificare LinearLayoutproprietà e comportamento, è sufficiente aggiungere le due seguenti proprietà alla destinazione TextView:

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

Cosa sarebbe meglio cambiare solo il tuo obiettivo per risolvere la tua soluzione invece di avere la possibilità di causare un altro problema in futuro, modificando tuo padre target? pensaci :)


Viene visualizzato un errore che dice che non è stato trovato alcun identificatore di risorsa per la risorsa "textAlignment" nel pacchetto Android.
anu,

Sei sicuro di accedere a una TextViewproprietà? - È possibile controllare la proprietà dal riferimento qui: developer.android.com/reference/android/view/…
Paulo Roberto Rosa,

4
textAlignment è stato aggiunto nel livello API 17 (Android 4.2). L'emulatore / dispositivo dovrà essere in esecuzione 4.2+ per farlo funzionare.
Thanhtd,

Ho provato a utilizzare questa proprietà textAlignment in Android 4.1.2 e ho ricevuto l'errore "Nessun identificatore di risorsa trovato per l'attributo 'textAlignment'". Ho trovato la risposta per questo errore qui stackoverflow.com/a/20176191/723507 . Come hai potuto usarlo in 4.0.3?
Thanhtd,

20

android:layout_gravityviene utilizzato per allineare la vista del testo rispetto al layout principale. android:gravityviene utilizzato per allineare il testo all'interno della vista testo.

Sei sicuro di voler allineare il testo all'interno della vista di testo a destra o vuoi spostare la vista di testo stessa a destra rispetto al layout principale o stai cercando di ottenere entrambi


sto cercando di allineare il testo all'interno della vista testo a destra
Bishan,

11

Il seguente frammento di codice:

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

funziona benissimo per me


11

Nel caso in cui qualcuno abbia ancora bisogno

android:gravity="end"

a cosa serve?
gumuruh,

In LTR, questo allinea il testo a destra e in RTL, a sinistra
npk

8

Assicurati di non utilizzare in android:layout_width="wrap_content"tal caso, quindi non sarà possibile impostare la gravità perché non hai abbastanza spazio per allineare il testo. Invece usaandroid:layout_width="fill_parent"


7
android:gravity="right"

Viene utilizzato fondamentalmente nel layout lineare, quindi è necessario impostare la larghezza di TextView o EditText come

android:layout_width = "match_parent"

e

Quando si lavora in layout relativo, utilizzare

android:layout_alignParentRight="true"

5

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


5

Se è dentro RelativeLayoutpuoi usareandroid:layout_toRightOf="@id/<id_of_desired_item>"

O

Se si desidera allineare rightall'angolo del dispositivo il luogoandroid:layout_alignParentRight="true"


4

Vorrei spiegare il concetto di gravità usando WEB perché molti sviluppatori ne sono consapevoli.

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

Considerando che il android_gravitylavoro cometext_align:centre|left|right

In Android float è android_layout_gravity e text_align: è android_gravity.

E android_layout_gravity si applica rispetto al genitore. dove as android_gravity si applica al suo contenuto figlio o interiore.

Nota android_gravity funziona solo quando la sua vista è match_parent (quando ha spazio al centro).


3

Di seguito funziona per me:

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

Nota le impostazioni android:layout_alignParentEnde android:textAlignmentdel secondo TextView.


2

Puoi usare:

    android:layout_alignParentRight="true"
    android:layout_centerVertical="true"


2

Nel mio caso, stavo usando Relative Layoutper aemptyString

Dopo aver lottato su questo per un'ora. Solo questo ha funzionato per me:

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

layout_toRightOfo layout_toEndOfentrambi funzionano, ma per supportarlo meglio, ho usato entrambi.

Per rendere più chiaro:

Questo era quello che stavo cercando di fare:

inserisci qui la descrizione dell'immagine

E questo era l'output dell'emulatore

inserisci qui la descrizione dell'immagine

Disposizione:

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

Notare che:

  1. android:layout_width="wrap_content" lavori
  2. Gravity non viene utilizzato

1

Ho anche affrontato lo stesso problema e ho pensato che il problema si stesse verificando poiché layout_width di TextView stava avendo wrap_content. Devi avere layout_width come match_parent e androide: gravità = "gravità"


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>

allinea il numero uno al centro sia in orizzontale che in verticale.



0

Nel mio caso ho usato l'attributo "layout_alignRight", nel suo testo:

android:layout_alignRight="@+id/myComponentId"

Se vuoi aggiungere un po 'di margine destro, imposta l'attributo "Layout_Margin Right" su "20dp" per esempio, nel testo è:

android:layout_marginRight="20dp"
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.