У меня есть TextView
в моем приложении. Я хочу выровнять текст в нем справа. Я попытался добавить:
android:gravity="right"
Но это не работает для меня.
Что я могу делать неправильно?
У меня есть TextView
в моем приложении. Я хочу выровнять текст в нем справа. Я попытался добавить:
android:gravity="right"
Но это не работает для меня.
Что я могу делать неправильно?
Я думаю, что вы это делаете: android:layout_width = "wrap_content"
Если это так, сделайте следующее: android:layout_width = "match_parent"
В общем случае android:gravity="right"
отличается от android:layout_gravity="right"
.
Первый влияет на положение самого текста в представлении, поэтому, если вы хотите, чтобы он был выровнен по правому краю, тогда layout_width=
должен быть либо "fill_parent"
, либо "match_parent"
.
Второй влияет на позицию "Вид" внутри его родителя, другими словами - выравнивание самого объекта (окно редактирования или текстовое представление) внутри родительского представления.
Лучшее решение - это самое простое, а другое - меньшее изменение в коде поведения.
Что делать, если вы можете решить эту проблему только с помощью двух свойств на TextView
?
Вместо необходимости изменять свои свойства LinearLayout
, которые могут изменить поведение дочерних элементов LinearLayout
?
Используя этот способ, вам не нужно изменять свойства и поведение LinearLayout
, вам нужно добавить только два следующих свойства к вашему целевому TextView
:
android:gravity="right"
android:textAlignment="gravity"
Что было бы лучше изменить только вашу цель, чтобы решить ваше решение вместо того, чтобы иметь возможность вызвать еще одну проблему в будущем, изменив целевого отца? подумайте об этом:)
android:layout_gravity
используется для выравнивания текстового представления относительно родительского макета.
android:gravity
используется для выравнивания текста внутри текстового вида.
Вы уверены, что пытаетесь выровнять текст внутри текстового представления справа или вы хотите переместить текстовое представление вправо относительно родительского макета или пытаетесь выполнить оба
Следующий фрагмент кода:
android:textAlignment="textEnd"
android:layout_gravity="end"
отлично работает для меня
Убедитесь, что вы не используете android:layout_width="wrap_content"
, если это так, тогда он не сможет установить гравитацию, потому что у вас недостаточно места для выравнивания текста. Вместо этого используйте android:layout_width="fill_parent"
android:gravity="right"
Он в основном используется в линейной компоновке, поэтому вам нужно установить ширину TextView или EditText как
android:layout_width = "match_parent"
и
Когда вы работаете в Relative Layout, используйте
android:layout_alignParentRight="true"
Если кому-то все еще нужно
android:gravity="end"
Если он находится в RelativeLayout
, вы можете использовать android:layout_toRightOf="@id/<id_of_desired_item>"
Или
Если вы хотите выровнять по углу right
устройства, место android:layout_alignParentRight="true"
Сделайте (LinearLayout) android:layout_width="match_parent"
и TextView android:layout_gravity="right"
Позвольте мне объяснить концепцию гравитации, используя WEB, потому что многие разработчики знают об этом.
android_layout_gravity
ведет себя float:left|right|top|bottom
В то время как android_gravity
работает как text_align:centre|left|right
В Android-плагине есть android_layout_gravity и text_align: isroid_gravity.
И применяется android_layout_gravity относительно родителя. где asroid_gravity применяется к его дочернему или внутреннему контенту.
Примечание android_gravity работает только тогда, когда его представление соответствует match_parent (когда у него есть место для центра).
Ниже работает для меня:
<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
оба работают, но для лучшей поддержки я использовал оба.
Чтобы было понятнее:
Это было то, что я пытался сделать:
И это был выход эмулятора
Планировка:
<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" />
Заметить, что:
android:layout_width="wrap_content"
работаетGravity
не используетсяпопробуйте добавить android:gravity="center"
в TextView
Я использовал атрибут "layout_alignRight" в моем случае, в тексте его:
android:layout_alignRight="@+id/myComponentId"
Если вы хотите добавить немного правого поля, просто установите атрибут "Layout_Margin Right" на "20dp" для примера, в тексте его:
android:layout_marginRight="20dp"