#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
. Кажется, у меня это работает.