ListViewItem не выделяется, если фон не прозрачен

У меня есть ListViewItem с настраиваемым градиентным фоном. Селектор по умолчанию больше не выделяет эти строки.

Выделение работает только в том случае, если я установил прозрачный фон. Как я могу получить выделение без этого изменения?

Вот мой ListView:

<ListView android:id="@+id/symbolsListView"
    android:layout_width="fill_parent"
    android:background="@drawable/transparent_background"
    android:layout_height="390dp"
    android:divider="@drawable/ui_divider_line"
    android:cacheColorHint="#00000000"
    android:listSelector="@drawable/blue"
    android:drawSelectorOnTop="true"
    >

person Sheehan Alam    schedule 28.09.2010    source источник


Ответы (3)


ваши некоторые состояния, которые сфокусированы и window_focused. Ниже я упомянул код для селектора, попробуйте это.

<?xml version="1.0" encoding="UTF-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:state_window_focused="false" android:drawable="@color/transparent" />

    <!--
        Even though these two point to the same resource, have two states so
        the drawable will invalidate itself when coming out of pressed state.
    -->
    <item android:state_focused="true" android:state_enabled="false"
        android:state_pressed="true" android:drawable="@color/transparent" />
    <item android:state_focused="true" android:state_enabled="false"
        android:drawable="@color/transparent" />

    <item android:state_focused="true" android:state_pressed="true"
        android:drawable="@color/solid_red" />
    <item android:state_focused="false" android:state_pressed="true"
        android:drawable="@color/solid_red" />

    <item android:state_focused="true" android:drawable="@color/solid_red" />

</selector>

Надеюсь, что это работает.

person Praveen    schedule 28.09.2010
comment
те же результаты, весь вид списка становится красным - person Sheehan Alam; 28.09.2010
comment
@Sheehan Alam: какова твоя цель, чувак? Вы хотите изменить цвет селектора элемента списка? то у вас атрибут android:listSelector="@color/solid_red" достаточно на ListView. - person Praveen; 28.09.2010
comment
Проверьте мой обновленный код. Я попытался установить только listSelector на красный. Я просто хочу, чтобы выделенная строка была выделена красным цветом вместо оранжевого. Я не хочу, чтобы весь список менял цвета, а только выделение для выбранной строки. - person Sheehan Alam; 28.09.2010
comment
@Sheehan Alam: Пожалуйста, проверьте установленный вами атрибут android:listSelector="@drawable/blue" и android:background="@drawable/transparent_background". что атрибуты имеют правильное значение. - person Praveen; 29.09.2010
comment
Да, я использую оба этих значения в другом действии, и они отображаются там правильно. - person Sheehan Alam; 29.09.2010

Текущий выбор в ListView выделяется дополнительным рисунком, который вы предоставляете с помощью атрибута listSelector.

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

Есть 2 решения:

  • Сделайте фоновый градиент прозрачным, уменьшив значения альфа-канала.
  • Установите для атрибута drawSelectorOnTop значение true, чтобы селектор отображался поверх элемента списка. В этом случае убедитесь, что ваш селектор не полностью непрозрачен.
person DavGin    schedule 28.09.2010
comment
как я могу убедиться, что он не полностью непрозрачен? - person Sheehan Alam; 28.09.2010
comment
даже когда я устанавливаю drawSelectorOnTop, весь список меняет цвет. Я просто хочу выделить строку, а не весь список - person Sheehan Alam; 28.09.2010
comment
Если весь цвет ListView изменяется, вы установили фон, отображаемый с состояниями. Измените его на сплошной цвет, @null для прозрачного или рисуемого, который не меняется в зависимости от состояния. Следуйте этому правилу: никаких состояний на фоне ListView, никаких состояний на фоне макета элемента списка, отображение listSelector в зависимости от состояния. - person DavGin; 30.09.2010
comment
@anybody: как можно понизить альфа-значение фонового изображения? Можете ли вы уточнить фрагмент кода? - person kiki; 08.10.2010

Используйте <selector>, чтобы отобразить «нажатое» состояние с градиентным фоном.

person Mark B    schedule 28.09.2010
comment
теперь мой список становится красным каждый раз, когда я нажимаю на строку. я хочу, чтобы только элемент списка стал красным. проверить мой селектор xml - person Sheehan Alam; 28.09.2010
comment
Возможно, я неправильно понял. Вы устанавливаете градиентный фон для каждой строки или для самого ListView? - person Mark B; 28.09.2010
comment
градиентный фон в каждой строке - person Sheehan Alam; 28.09.2010