Настройка Android ListView Цвета? - PullRequest
7 голосов
/ 04 июня 2010

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

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

Когда я перемещаю фокус вверх и вниз, текст просто становится темно-серым, а фон элемента остается синим. (Это - то, когда я ожидал бы, что один ряд будет синим с остальным белым)

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

Вот мой основной файл макета:

<?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="@android:id/list"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:listSelector="@drawable/item_selector"
    />
<TextView
    android:id="@android:id/empty"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/empty"
    />
</LinearLayout>

Вот мой файл элемента списка:

<?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"
    android:orientation="horizontal" 
    android:padding="10sp">
    <CheckBox
        android:id="@+id/checkbox"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:focusable="false"
        />
    <TextView 
        android:id="@+id/title" 
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:ellipsize="end"
        android:singleLine="true" 
        android:textStyle="bold"
        android:padding="7dip"
        android:textSize="18sp"
        android:layout_toRightOf="@id/checkbox"
        />
</RelativeLayout>

Вот мой файл цветов:

<?xml version="1.0" encoding="utf-8"?>
<resources> 
    <color name="red">#ff00</color>
    <color name="green">#f0f0</color>
    <color name="blue">#f00f</color>
    <color name="white">#ffff</color>
</resources>

Вот мой файл селектора:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item 
        android:state_pressed="true" 
        android:drawable="@color/green" />
    <item 
        android:state_focused="true" 
        android:drawable="@color/blue" />
    <item 
        android:drawable="@color/white" />
</selector>

Надеюсь, что-то глупое и простое, что я делаю не так.

Заранее спасибо.

Ответы [ 2 ]

7 голосов
/ 04 июня 2010

Я думаю, что android: listSelector = "@ drawable / item_selector" применяется только к корню представления, а не к его подчиненному.

Попробуйте добавить @ drawable / item_selector в качестве фона вашего RelativeLayout с помощью android:background="@drawable/item_selector" и поместите прозрачный макет в listSelector:

android:listSelector="@android:color/transparent"
1 голос
/ 07 октября 2010

На самом деле, если вы хотите сделать это программно без использования ресурсов, вы можете установить цвет вашего элемента. Например, чтобы установить цвет текста # F123456 в TextView:

objTextView.setTextColor(color.parseColor("#F12345"));

Это удобно, если вы хотите динамически установить цвет в виде списка, который выбирается пользователем, возможно, хранится в базе данных, где вы просто не можете использовать статический файл ресурсов для списков цветов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...