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

215

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

android:gravity="right"

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

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

Bishan
источник

Ответы:

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

wiztrail
источник
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используется для выравнивания текста внутри текстового представления.

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

rogerstone
источник
я пытаюсь выровнять текст в текстовом представлении справа
Бишан
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

Сделайте (LinearLayout) android:layout_width="match_parent"и TextViewandroid:layout_gravity="right"

Август Фрэнсис
источник
5

Если это в RelativeLayoutвас можно использоватьandroid:layout_toRightOf="@id/<id_of_desired_item>"

Или

Если вы хотите выровнять rightугол устройства на местеandroid:layout_alignParentRight="true"

user2342517
источник
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 (когда у него есть место для центра).

Zar E Ahmer
источник
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"
Pablo
источник
2

это должно служить цели

android:textAlignment="textStart"

Масуд Чираги
источник
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"

Arup Saha
источник
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>

выравнивание по центру по горизонтали и вертикали.

Alp Altunel
источник
0

попробуйте добавить android:gravity="center"вTextView

TheGreenGoblen
источник
0

Я использовал атрибут "layout_alignRight" в моем случае, в тексте его:

android:layout_alignRight="@+id/myComponentId"

Если вы хотите добавить немного правого поля, просто установите атрибут «Layout_Margin Right» на «20dp» для примера, в тексте его:

android:layout_marginRight="20dp"
Laurent
источник