Wyrównaj do prawej tekst w Android TextView

215

Mam TextVieww mojej aplikacji. Chcę wyrównać tekst w prawo. Próbowałem dodać:

android:gravity="right"

Ale to nie działa dla mnie.

Co mogę robić źle?

Biszan
źródło

Odpowiedzi:

193

Myślę, że robisz to: android:layout_width = "wrap_content"
Jeśli tak jest, zrób to:android:layout_width = "match_parent"

uczciwy gracz
źródło
2
Wypełnienie @Bishan wypełni resztę miejsca, dopasowanie ustawi wartość równą szerokości elementu nadrzędnego
Troy Cosentino,
11
W rzeczywistości fill_parent i match_parent są tym samym. Nazwę zmieniono na match_parent, ponieważ najwyraźniej fill_parent wprowadzał ludzi w błąd.
Edward Falk,
158

Ogólnie android:gravity="right"różni się od android:layout_gravity="right".

Pierwszy wpływa na pozycję samego tekstu w Widoku, więc jeśli chcesz, aby był wyrównany do prawej, to layout_width=powinien być albo "fill_parent"albo "match_parent".

Drugi wpływa na pozycję Widoku wewnątrz jego rodzica, innymi słowy - wyrównuje sam obiekt (pole edycji lub widok tekstowy) w widoku rodzica.

wiztrail
źródło
83

Lepszym rozwiązaniem jest to, które jest najprostsze i takie, które mniej modyfikuje zachowanie twojego kodu .

Co zrobić, jeśli możesz rozwiązać ten problem tylko za pomocą 2 właściwości TextView?

Zamiast zmieniać swoje LinearLayoutwłaściwości, które mogą zmienić zachowanie LinearLayoutdziecka?

W ten sposób nie musisz zmieniać LinearLayoutwłaściwości i zachowania, musisz jedynie dodać dwie następujące właściwości do celu TextView:

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

Co byłoby lepiej zmienić tylko swój cel, aby rozwiązać swoje rozwiązanie, zamiast mieć szansę na spowodowanie kolejnego problemu w przyszłości, modyfikując docelowego ojca? Pomyśl o tym :)

Paulo Roberto Rosa
źródło
Występuje błąd informujący, że nie znaleziono identyfikatora zasobu dla zasobu „textAlignment” w pakiecie z systemem Android.
anu
Czy na pewno masz dostęp do TextViewnieruchomości? - Możesz sprawdzić właściwość z referencji tutaj: developer.android.com/reference/android/view/…
Paulo Roberto Rosa
4
textAlignment został dodany do poziomu API 17 (Android 4.2). Twój emulator / urządzenie musi działać w wersji 4.2+, aby to działało.
thanhtd
Próbowałem użyć tej właściwości textAlignment w Androidzie 4.1.2 i otrzymałem błąd „Nie znaleziono identyfikatora zasobu dla atrybutu„ textAlignment ””. Znalazłem odpowiedź na ten błąd tutaj stackoverflow.com/a/20176191/723507 . Jak możesz go używać w 4.0.3?
thanhtd
20

android:layout_gravitysłuży do wyrównywania widoku tekstu względem układu nadrzędnego. android:gravitysłuży do wyrównywania tekstu w widoku tekstu.

Czy na pewno próbujesz wyrównać tekst w widoku tekstu w prawo, czy chcesz przenieść sam widok tekstu w prawo w odniesieniu do układu nadrzędnego, czy próbujesz uzyskać oba

Rogerstone
źródło
próbuję wyrównać tekst w widoku tekstu z prawej strony
Bishan
11

Poniższy fragment kodu:

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

działa dla mnie świetnie

Fey Agape
źródło
11

Na wypadek, gdyby ktoś nadal potrzebował

android:gravity="end"
npk
źródło
Po co to?
gumuruh
W LTR wyrównuje tekst do prawej, a w RTL do lewej
npk
8

Upewnij się, że nie używasz, android:layout_width="wrap_content"jeśli tak, to nie będzie w stanie ustawić grawitacji, ponieważ nie masz wystarczającej ilości miejsca na wyrównanie tekstu. Zamiast tego użyjandroid:layout_width="fill_parent"

Lalit Poptani
źródło
7
android:gravity="right"

Jest on zasadniczo używany w układzie liniowym, więc musisz ustawić szerokość TextView lub EditText jako

android:layout_width = "match_parent"

i

Gdy pracujesz w układzie względnym, użyj

android:layout_alignParentRight="true"
Kushal Ramola
źródło
5

Wykonaj (LinearLayout) android:layout_width="match_parent"i TextViewandroid:layout_gravity="right"

Augusta Franciszka
źródło
5

Jeśli tak RelativeLayout, możesz użyćandroid:layout_toRightOf="@id/<id_of_desired_item>"

Lub

Jeśli chcesz wyrównać do rightrogu urządzenia miejsceandroid:layout_alignParentRight="true"

użytkownik2342517
źródło
4

Pozwól mi wyjaśnić pojęcie grawitacji za pomocą WEB, ponieważ wielu programistów jest tego świadomych.

android_layout_gravity zachowuje się float:left|right|top|bottom

Natomiast android_gravitypraca jakotext_align:centre|left|right

W systemie Android float to android_layout_gravity, a text_align: is android_gravity.

I android_layout_gravity dotyczy względem rodzica. gdzie jako android_gravity dotyczy jego treści podrzędnej lub wewnętrznej.

Uwaga android_gravity działa tylko wtedy, gdy jego Widok ma wartość match_parent (gdy ma miejsce na środku).

Zar E Ahmer
źródło
3

Poniżej działa dla mnie:

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

Uwaga android:layout_alignParentEndi android:textAlignmentustawienia drugiego TextView.

David Cheung
źródło
2

Możesz użyć:

    android:layout_alignParentRight="true"
    android:layout_centerVertical="true"
Pablo
źródło
2

powinno to służyć celowi

android:textAlignment="textStart"

masoud Cheragee
źródło
2

W moim przypadku korzystałem Relative LayoutzemptyString

Po godzinie walki. Tylko to działało dla mnie:

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

layout_toRightOflub layout_toEndOfoba działają, ale dla lepszego wsparcia użyłem obu.

Aby było bardziej jasne:

Właśnie to próbowałem zrobić:

wprowadź opis zdjęcia tutaj

I to było wyjście emulatora

wprowadź opis zdjęcia tutaj

Układ:

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

Zauważ, że:

  1. android:layout_width="wrap_content" Pracuje
  2. Gravity nie jest używany
Rohit Sharma
źródło
1

Zetknąłem się z tym samym problemem i doszedłem do wniosku, że problem występuje, ponieważ szerokość_widoku w TextView ma zawartość wrap_content. Musisz mieć layout_width jako match_parent i android: gravity = "gravity"

Arup Saha
źródło
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>

sprawia, że ​​numer jeden jest wyrównany do środka zarówno poziomo, jak i pionowo.

Alp Altunel
źródło
0

spróbuj dodać android:gravity="center"doTextView

TheGreenGoblen
źródło
0

W moim przypadku użyłem atrybutu „layout_alignRight” w tekście:

android:layout_alignRight="@+id/myComponentId"

Jeśli chcesz dodać prawy margines, po prostu ustaw atrybut „Layout_Margin Right” na „20dp”, na przykład:

android:layout_marginRight="20dp"
Laurent
źródło