Проблема с фоновым макетом для просмотра Android

#android #listview #layout #background-color

#Android #listview #макет #цвет фона

Вопрос:

Я пытаюсь использовать пустое представление, чтобы указать цвет для каждого элемента в ListView.

Идея заключается в том, что представление rowColor — это просто строка шириной 3dp, размер которой должен автоматически соответствовать высоте secondLine и thirdLine (обратите внимание, что все содержимое задается в коде, включая цвет фона rowColor, и что для firstLine и thirdLine часто задается значение GONE).

Это отлично отображается в графическом макете Eclipse, но rowColor вообще не отображается на моем телефоне (работает под управлением 2.3.3), и все виды сложены. Есть идеи, как это исправить?

Следующий код для list_row был принят отсюда. Я предоставил весь код, который, по моему мнению, работает на основе этого макета, но даже близко не подходит. Этот макет все еще работает?

list_row.xml:

 <RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="?android:attr/listPreferredItemHeight"
android:padding="6dip">

<TextView
    android:id="@ id/firstLine"

    android:layout_width="fill_parent"
    android:layout_height="wrap_content"

    android:layout_alignParentTop="true"
    android:layout_alignParentLeft="true"

    android:singleLine="true"
    android:text="First Line" />

<View
    android:id="@ id/rowColor"
    android:background="#FF0000"

    android:layout_width="3dp"
    android:layout_height="fill_parent"

    android:layout_below="@id/firstLine"
    android:layout_alignParentBottom="true" />

<TextView
    android:id="@ id/thirdLine"

    android:layout_width="fill_parent"
    android:layout_height="wrap_content"

    android:layout_toRightOf="@id/rowColor"
    android:layout_alignParentBottom="true"
    android:layout_alignParentRight="true"

    android:singleLine="true"
    android:text="Third Line" />

<TextView
    android:id="@ id/secondLine"

    android:layout_width="fill_parent"
    android:layout_height="wrap_content"

    android:layout_toRightOf="@id/rowColor"
    android:layout_alignParentRight="true"
    android:layout_below="@id/firstLine"
    android:layout_above="@id/thirdLine"
    android:layout_alignWithParentIfMissing="true"

    android:gravity="center_vertical"
    android:singleLine="true"
    android:text="Second Line" />
</RelativeLayout>
  

main.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="fill_parent">
<ListView
    android:id="@ id/android:list"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"/>
</LinearLayout>
  

ListViewTest.java Активность здесь:http://pastie.org/2035822

Спасибо.

Комментарии:

1. Может быть, попробуйте «wrap_content», посмотрите, что это дает

2. Это когда-нибудь появляется? или это отсутствует только тогда, когда firstList ИСЧЕЗ

3. Ну, rowColor на самом деле никогда не имеет содержимого, просто цвет фона. Это не отображается для wrap_content или match_parent, или когда отсутствует первая строка. Я вижу это только тогда, когда у меня установлена его высота на некоторый размер, например 40dp.

4. Обновление: Не обращайте внимания на мой последний комментарий. Приведенный выше код намного более упрощен по сравнению с тем, что я фактически использовал для тестирования ранее, но отображается некорректно вообще .. кто-нибудь знает почему?

Ответ №1:

Я протестировал ваш макет в нескольких эмуляторах (от 2.1 до 2.3.3), и он отлично работает, с настройкой или без установки первой видимости TextView для View.GONE.

Должно быть, это либо проблема в вашем коде в другом месте, либо сбой вашего конкретного устройства.

В качестве обходного пути вы можете использовать:

 android:layout_height="0dp"
  

для вашего представления rowColor. Поскольку вы уже определяете положение верхнего и нижнего пределов с помощью android:layout_below="@id/firstLine" и android:layout_alignParentBottom="true" , фактическое значение layout_height не имеет значения.

Комментарии:

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

2. Я бы посоветовал добавить к нему меньше , не больше кода. Обрезайте его, пока не найдете, что не так. Я вставил макет в Eclipse и добавил его в фиктивный проект. Затем я запускаю его через несколько эмуляторов, как я сказал выше, а не только с графическим оформлением в IDE.

3. Я надеялся, что вы действительно использовали его в ListView. Я предоставил дополнительный код, который должен заставить его работать, но это не так. Есть мысли?

Ответ №2:

Я недавно столкнулся с этим и обнаружил, что a View без какого-либо содержимого, кроме цвета фона, не будет отображаться в a RelativeLayout .

Если вы можете, попробуйте преобразовать свой макет в LinearLayout . Кажется, у меня это работает.