Выровнять текст по правому краю в Android TextView


215

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

android:gravity="right"

Но это не работает для меня.

Что я могу делать не так?

Ответы:


193

Я думаю, что вы делаете это: android:layout_width = "wrap_content"
если это так, сделайте это:android:layout_width = "match_parent"


2
@Bishan fill заполнит оставшуюся часть пространства, match установит его равным ширине родительского элемента
Troy Cosentino

11
На самом деле, fill_parent и match_parent - это одно и то же. Имя было изменено на match_parent, потому что, очевидно, fill_parent сбивал людей с толку.
Эдвард Фальк

158

В общем, android:gravity="right"отличается от android:layout_gravity="right".

Первый влияет на положение самого текста в представлении, поэтому, если вы хотите, чтобы он был выровнен по правому краю, то layout_width=должно быть либо "fill_parent"или "match_parent".

Второй влияет на положение View внутри его родителя, другими словами - выравнивание самого объекта (поле редактирования или текстовое представление) внутри родительского представления.


83

Лучшее решение - это то, которое является самым простым, и которое делает меньше изменений в поведении вашего кода .

Что делать, если вы можете решить эту проблему только с 2 свойствами на вашем TextView?

Вместо того, чтобы менять свои LinearLayoutсвойства, которые могут изменить поведение LinearLayoutдетей?

Используя этот способ, вам не нужно изменять LinearLayoutсвойства и поведение, вам нужно только добавить два следующих свойства к вашей цели TextView:

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

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


Я получаю сообщение об ошибке, говорящее, что не найден идентификатор ресурса для ресурса 'textAlignment' в пакете Android.
Anu

Вы уверены, что вы получаете доступ к TextViewнедвижимости? - Вы можете проверить свойство по ссылке здесь: developer.android.com/reference/android/view/…
Пауло Роберто Роза

4
textAlignment был добавлен на уровне API 17 (Android 4.2). Ваш эмулятор / устройство должно работать под управлением 4.2+, чтобы это работало.
Спасибо

Я попытался использовать это свойство textAlignment в Android 4.1.2 и получил ошибку «Не найден идентификатор ресурса для атрибута« textAlignment »». Я нашел ответ на эту ошибку здесь stackoverflow.com/a/20176191/723507 . Как вы могли бы использовать его в 4.0.3?
Спасибо

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"

и

Когда вы работаете в Relative Layout, используйте

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 работает только тогда, когда его View равен match_parent (когда у него есть место для центра).


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 и андроид: 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.