ListViewItem не выделяется, если фон не прозрачен - PullRequest
2 голосов
/ 28 сентября 2010

У меня есть 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"
    >

Ответы [ 3 ]

4 голосов
/ 28 сентября 2010

ваши некоторые состояния, которые являются сфокусированными и 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>

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

2 голосов
/ 28 сентября 2010

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

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

Существует два решения:

  • Сделайте градиент фона прозрачным, уменьшив альфа-значения.
  • Установите для атрибута drawSelectorOnTop значение true, чтобы селектор рисовался поверх элемента списка.В этом случае убедитесь, что ваш селектор не полностью непрозрачен.
1 голос
/ 28 сентября 2010

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

...