Android: layout_gravity не работает, как ожидалось - PullRequest
10 голосов
/ 22 января 2010

У меня есть простая 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, но он все равно дал мне результат, например: Больше комментариев (Иконка)

То, что я ожидал, Больше комментариев (Иконка)

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

Ответы [ 4 ]

33 голосов
/ 22 января 2010

LinearLayouts с горизонтальной ориентацией не поддерживают правую / левую гравитацию. Вы можете найти обходной путь здесь .

8 голосов
/ 23 января 2010

Я понял, что не так с моим 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>
1 голос
/ 22 января 2010

Я сделал только несколько проектов с android, но android: layout_gravity задает выравнивание для View внутри родительского элемента, android: gravity определяет выравнивание видов, содержащихся в View, гравитацию которого вы указываете. Убедитесь, что вы правильно указали. В документации не проводится различия между этими двумя.

Вам будет проще помочь, если вы разместите образец XML.

EDIT:

Я вижу, что вы уже опубликовали XML. Похоже, у вас установлен правильный атрибут, но если вы выравниваете текст вправо, почему вы бы поместили его первым в линейном макете? Я предлагаю изменить его, чтобы перейти слева направо.

0 голосов
/ 23 января 2010

Вот код, который я написал для своего проекта. Это выполняет то, что вы ищете. Я бы просто поменял типы управления и все такое, и ты должен быть выключен.

<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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...