Право вирівняйте текст в android TextView


215

У мене є TextViewв моїй заяві. Я хочу вирівняти текст у ньому праворуч. Я спробував додати:

android:gravity="right"

Але це не працює для мене.

Що я можу зробити неправильно?

Відповіді:


193

Я думаю, що ви це робите: android:layout_width = "wrap_content"
Якщо це так, зробіть це:android:layout_width = "match_parent"


2
@ Бішан заповнить залишок місця, матч встановить його рівним ширині батьків
Троя Косентіно

11
Насправді fill_parent та match_parent - те саме. Назву було змінено на match_parent, оскільки мабуть fill_parent заплутав людей.
Едвард Фолк

158

Загалом, android:gravity="right"відрізняється від android:layout_gravity="right".

Перший впливає на положення самого тексту в межах Перегляду, тому, якщо ви хочете, щоб він був вирівняний вправо, то layout_width=має бути або "fill_parent"або "match_parent".

Другий впливає на позицію Перегляду всередині його батьківського, іншими словами - вирівнювання самого об'єкта (поле редагування або перегляд тексту) всередині батьківського подання.


83

Краще рішення - це найпростіший варіант, і той, що робить менше змін у поведінці коду .

Що робити, якщо ви зможете вирішити цю проблему лише за допомогою 2 властивостей на вашому TextView?

Замість того, щоб змінювати свої LinearLayoutвластивості, що, можливо, може змінити поведінку LinearLayoutдітей?

Використовуючи цей спосіб, вам не потрібно змінювати LinearLayoutвластивості та поведінку, вам потрібно лише додати два наступні властивості до своєї цілі TextView:

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

Що було б краще змінити лише свою ціль, щоб вирішити своє рішення, а не мати можливість спричинити ще одну проблему в майбутньому, змінивши свого цільового батька? подумай над цим :)


Я отримую помилку, кажучи, що в пакеті Android не знайдено ідентифікатора ресурсу для "textAlignment" ресурсу.
ану

Ви впевнені, що добираєтесь до TextViewвластивостей? - Ви можете перевірити власність за посиланням тут: developer.android.com/reference/android/view/…
Paulo Roberto Rosa

4
textAlignment додано в рівні 17 API (Android 4.2). Для роботи емулятора / пристрою для цього потрібно працювати з версією 4.2+.
ніж

Я спробував використовувати цю властивість textAlignment в Android 4.1.2 і отримав помилку "Не знайдено ідентифікатор ресурсу для атрибута" textAlignment "". Я знайшов відповідь на цю помилку тут stackoverflow.com/a/20176191/723507 . Як ви могли використовувати його в 4.0.3?
thanhtd

20

android:layout_gravityвикористовується для вирівнювання подання тексту щодо батьківського макета. android:gravityвикористовується для вирівнювання тексту всередині перегляду тексту.

Ви впевнені, що намагаєтеся вирівняти текст всередині подання тексту праворуч чи хочете перемістити сам подання тексту праворуч стосовно батьківського макета, чи намагаєтесь виконати обидва


Я намагаюся вирівняти текст всередині перегляду тексту праворуч
Бішан

11

Наступний фрагмент коду:

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

чудово працює для мене


11

У випадку, якщо комусь все-таки потрібно

android:gravity="end"

для чого це?
гумарух

У LTR це вирівнює текст праворуч і в RTL, зліва
npk

8

Переконайтеся, що ви не використовуєте, android:layout_width="wrap_content"якщо так, то він не зможе встановити гравітацію, оскільки у вас недостатньо місця для вирівнювання тексту. Замість використанняandroid:layout_width="fill_parent"


7
android:gravity="right"

В основному він використовується в лінійному макеті, тому вам потрібно встановити ширину TextView або EditText як

android:layout_width = "match_parent"

і

Коли ви працюєте у відносній макеті, використовуйте

android:layout_alignParentRight="true"


5

Якщо він є, RelativeLayoutви можете використовуватиandroid:layout_toRightOf="@id/<id_of_desired_item>"

Або

Якщо ви хочете вирівняти rightкут пристрою місцеandroid:layout_alignParentRight="true"


4

Дозвольте мені пояснити концепцію гравітації за допомогою WEB, оскільки багато розробників знають про це.

android_layout_gravity поводиться float:left|right|top|bottom

Тоді android_gravityяк робота якtext_align:centre|left|right

В Android float є android_layout_gravity, а text_align: це android_gravity.

І android_layout_gravity застосовується відносно батьківського. де як android_gravity застосовується до його дочірніх або внутрішнього змісту.

Примітка android_gravity працює лише тоді, коли його Перегляд є відповідним (коли у ньому є простір до центру).


3

Нижче працює для мене:

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

Зверніть увагу android:layout_alignParentEndта android:textAlignmentпараметри другого TextView.


2

Ви можете використовувати:

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


2

У моєму випадку я використовував Relative LayoutдляemptyString

Після боротьби над цим протягом години. Тільки це працювало для мене:

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

layout_toRightOfабо layout_toEndOfобидва працюють, але щоб краще підтримати, я використовував обидва.

Щоб зробити це більш зрозумілим:

Це те, що я намагався зробити:

введіть тут опис зображення

І це був вихід емулятора

введіть тут опис зображення

Макет:

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

Зауважте, що:

  1. android:layout_width="wrap_content" працює
  2. Gravity не використовується

1

Я також зіткнувся з тією ж проблемою і зрозумів, що ця проблема відбувається так, як у layout_width TextView був wrap_content. Потрібно мати layout_width як match_parent та android: gravity = "gravity"


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>

робить вирівнювання номер один у центрі як горизонтальним, так і вертикальним.



0

Я використовував атрибут "layout_alignRight" у своєму випадку, в тексті його:

android:layout_alignRight="@+id/myComponentId"

Якщо ви хочете додати деякий правий запас, просто встановіть атрибут "Layout_Margin Right" на "20dp" для зразка, в тексті його:

android:layout_marginRight="20dp"
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.