RelativeLayout ведет себя иначе, как элемент списка - PullRequest
3 голосов
/ 18 октября 2011

Добрый день, дроиды!

Я столкнулся с досадной проблемой компоновки, которой у меня нет объяснений после нескольких часов и часов исследования ...: /. Я создал сокращенный тестовый пример, который я представляю здесь.

У меня есть простой макет элемента списка.

элемент списка http://www.freeimagehosting.net/4075a.jpg

ссылка на изображение элемента lis

XML:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/relativeLayout1"
    android:layout_width="match_parent" 
    android:layout_height="wrap_content"
    android:minHeight="96dp">

<TextView android:layout_width="wrap_content"
    android:layout_height="wrap_content" 
    android:text="TextView"
    android:id="@+id/textView1" android:textAppearance="?android:attr/textAppearanceMedium"
    android:layout_centerVertical="true" android:layout_centerHorizontal="true" />

<TextView android:layout_width="wrap_content"
    android:layout_height="wrap_content" android:text="TextView"
    android:id="@+id/textView2" android:layout_alignParentTop="true" />

<ImageView 
    android:layout_width="10dp" 
    android:layout_height="match_parent"
    android:id="@+id/imageView1" 
    android:src="@drawable/errorindicator"
    android:layout_below="@id/textView2" />

</RelativeLayout>

Указатель ошибки представляет собой красный прямоугольник, который вы видите на изображении с левой стороны.XML выглядит следующим образом:

    <?xml version="1.0" encoding="utf-8"?>
    <shape shape="rectangle"  xmlns:android="http://schemas.android.com/apk/res/android">
     <solid android:color="@color/ControllingConflictColor" />
     <padding android:left="0dp" android:top="0dp" 
         android:right="0dp" android:bottom="0dp" />
    </shape>

Описанный макет элемента списка работает, как и ожидалось.

Теперь я пытаюсь заполнить представление списка элементами списка как описано выше.Результат выглядит так:

представление списка с элементами списка http://www.freeimagehosting.net/4cc4b.jpg

ссылка на изображение представления списка

Соответствующий xml:

    <?xml version="1.0" encoding="utf-8"?>
    <ListView android:id="@+id/listView1" android:layout_width="fill_parent"
        android:layout_height="fill_parent" xmlns:android="http://schemas.android.com/apk/res/android">
        <!-- Preview: listitem=@layout/test -->
    </ListView>

Как вы можете видеть на изображении, красный прямоугольник больше не соответствует его родителю по высоте. Изображения сделаны из конструктора, но тот же эффект также включенэмулятор и устройство.Я занимаюсь разработкой для API уровня 8.

** Мне бы очень хотелось, если бы кто-нибудь мог объяснить мне, почему описанный макет не работает, как ожидалось в представлении списка.Почему форма рисования ведет себя иначе?**

Спасибо за потраченное время:)

edit: у меня проблемы с встраиванием изображения, вместо этого я использовал ссылку, извините; (edit: добавлен тег xml-drawable.

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

Ответы [ 3 ]

0 голосов
/ 19 октября 2011

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

Я переопределил метод onDraw метода RelativeLayout и сам закрашиваю этот красный прямоугольник (после того, как процесс макета завершен и высоты установлены) ...

0 голосов
/ 19 октября 2011

Если вы сделали актив в виде png, вы могли бы затем 9-патчить его и добавить в качестве фона RelativeLayout

0 голосов
/ 18 октября 2011

Мне также трудно сделать это, используя RelativeLayout. Хорошо попробуйте этот макет для вашей строки XML. Он использует LinearLayout.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:orientation="vertical">
    <TextView android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:text="TextView" 
        android:id="@+id/textView2" 
        android:layout_alignParentTop="true" />
    <LinearLayout android:layout_width="fill_parent"
        android:layout_height="wrap_content">
        <LinearLayout android:layout_width="10dip" 
            android:layout_height="fill_parent"
            android:background="@drawable/errorindicator"/>       
        <TextView android:layout_width="0dip" 
            android:layout_height="wrap_content" 
            android:text="TextView" android:layout_weight="1.0" 
            android:id="@+id/textView1"
            android:textAppearance="?android:attr/textAppearanceMedium" 
            android:gravity="center"/>
   </LinearLayout>
</LinearLayout>
...