Android: layout_gravity не работает должным образом
У меня есть простой LinearLayout с одним TextView и одним ImageView. Я хочу, чтобы текст в TextView был выровнен вправо, но результат показывает, что текст был выровнен слева. Что-то не так с моим макетом xml? Спасибо.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="fill_parent"
android:layout_height="wrap_content" android:background="#E8E3E4">
<LinearLayout android:orientation="horizontal"
android:layout_width="wrap_content" android:layout_height="wrap_content"
>
<TextView android:layout_width="260dp" android:layout_height="wrap_content"
android:text="More Comments" android:textStyle="bold" android:background="#ff0000"
android:textColor="#121222" android:layout_gravity="right" />
<ImageView android:layout_width="50dp"
android:layout_height="wrap_content" android:src="@drawable/arrow_right"
android:layout_gravity="center" android:scaleType="centerInside" />
</LinearLayout>
</LinearLayout>
Спасибо, Майкл. Но обходной путь, о котором вы говорили, не работает.
Я попытался использовать RelativeLayout, но это все равно дало мне результат:
Комментарии (Icon)
Я ожидал, что Комментарии (Icon)
Ниже приведен список RelativeLayout. Что-то не так с ним?
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent" android:layout_height="fill_parent">
<TextView android:id="@+id/label" android:layout_width="260dp"
android:layout_height="wrap_content" android:text="More Comments"
android:textStyle="bold" android:background="#ff0000"
android:textColor="#121222" android:layout_gravity="right" />
<ImageView android:layout_width="50dp" android:layout_height="wrap_content"
android:src="@drawable/arrow_right" android:layout_gravity="center"
android:scaleType="centerInside" android:layout_toRightOf="@id/label" />
</RelativeLayout>
Следуя обходному пути в комментарии Майкла, у меня есть XML ниже. Я ожидал, что вывод будет следующим:
RightLeft
но фактический вывод:
Right Left
Итак, обходной путь не работает для меня. Любые мысли?
<LinearLayout android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="right"
android:layout_weight="1.0"
android:text="RIGHT"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="left"
android:text="LEFT"/>
</LinearLayout>
Ответы
Ответ 1
Я понял, что не так с моим xml. Я должен был использовать гравитацию вместо layout_gravity для выравнивания текста в TextView. Следующий XML работает как ожидалось.
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent" android:layout_height="fill_parent">
<TextView android:id="@+id/label" android:layout_width="260dp"
android:layout_height="wrap_content" android:text="More Comments"
android:textStyle="bold" android:background="#ff0000"
android:textColor="#121222" android:gravity="right" />
<ImageView android:layout_width="50dp" android:layout_height="wrap_content"
android:src="@drawable/arrow_right" android:layout_gravity="center"
android:scaleType="centerInside" android:layout_toRightOf="@id/label" />
</RelativeLayout>
Ответ 2
LinearLayouts с горизонтальной ориентацией не поддерживает правую/левую гравитацию. Вы можете найти обходное решение здесь.
Ответ 3
Я выполнил только несколько проектов с помощью android, но android: layout_gravity указывает выравнивание для представления в родительском, android: gravity указывает выравнивание Представлений, содержащихся в представлении, значение силы тяжести, которое вы указываете. Убедитесь, что у вас есть правильный. В документации не проводится различие между этими двумя.
Было бы проще помочь вам, если бы вы разместили образец XML.
EDIT:
Я вижу, что вы разместили XML сейчас. Это похоже на то, что у вас есть правильный набор атрибутов, но если вы выравниваете текст вправо, зачем вы его ставите первым в линейном макете? Я предлагаю изменить его, чтобы идти влево-вправо.
Ответ 4
Вот код, который я написал для моего проекта. Он выполняет то, что вы ищете. Я бы просто изменил типы управления и т.д., И вы должны быть выключены и запущены.
<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="50dip"
android:background="#ffdddddd">
<TextView android:layout_width="260dp"
android:layout_height="wrap_content"
android:text="More Comments"
android:textStyle="bold"
android:background="#ff0000"
android:textColor="#121222"
android:layout_centerHorizontal="true"
android:layout_alignParentTop="true" />
<ImageView android:layout_width="50dp"
android:layout_height="wrap_content"
android:src="@drawable/arrow_right"
android:scaleType="centerInside"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true" />
</RelativeLayout>