Выравнивание текста по правому краю в android TextView


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

android:gravity="right"

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

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

18 193

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