Выравнивание текста справа в Android TextView

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

android:gravity="right"

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

что я могу делать неправильно?

18 ответов


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


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

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

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


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

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

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

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

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

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


android:layout_gravity используется для выравнивания текстового представления относительно родительского макета. android:gravity используется для выравнивания текста внутри текстового представления.

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


убедитесь, что вы не используете android:layout_width="wrap_content" Если это так, то он не сможет установить гравитацию, потому что у вас недостаточно места для выравнивания текста. Вместо этого используйте android:layout_width="fill_parent"


следующий фрагмент кода:

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

на


android:gravity="right"

он в основном используется в линейном макете, поэтому вам нужно установить ширину TextView или EditText как

android:layout_width = "match_parent"

и

когда вы работаете в относительном макете, используйте

android:layout_alignParentRight="true"

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


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

или

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


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


в случае, если кто-то еще должен

android:gravity="end"

ниже работает для меня:

<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.


вы можете использовать:

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

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

android:textAlignment="textStart"


Я также столкнулся с той же проблемой и понял, что проблема происходит, поскольку layout_width TextView имеет wrap_content. Вам нужно иметь layout_width как match_parent и android: gravity = "гравитация"


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

делает номер один выравнивания в центре горизонтальной и вертикальной.


в моем случае, я использую Relative Layout на emptyString

после борьбы на этом в течение часа. Только это сработало для меня:

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

layout_toRightOf или layout_toEndOf оба работают, но для поддержки его лучше, я использовал оба.

чтобы сделать его более ясным:

вот что я пытался сделать:

enter image description here

и это был эмулятор вывод

enter image description here

планировка:

<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 не используется

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