У меня есть простой список с listselector как так.
<ListView android:id="@+id/list" android:layout_width="fill_parent"
android:layout_height="fill_parent" android:layout_below="@+id/round"
android:listSelector="#99000000" android:clickable="true" android:cacheColorHint="#00000000" android:background="#00000000">
</ListView>
Поскольку Вы видите android:listSelector = "#99000000", но "черная альфа" цвет применяется ко всему списку, не выбранному пункту.
Таким образом, это - то, что я имею теперь, но весь список все еще становится черным
::listview_background.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_enabled="false" android:state_focused="true"
android:drawable="@drawable/list_normal" />
<item android:state_pressed="true"
android:drawable="@drawable/list_pressed" />
<item android:state_focused="true"
android:drawable="@drawable/list_active" />
</selector>
::colors.xml
<resources>
<drawable name="list_normal">#96FFFFFF</drawable>
<drawable name="list_active">#66000000</drawable>
<drawable name="list_pressed">#CA000000</drawable>
</resources>
:: тег XML в моем списке
android:listSelector="@drawable/listview_background"
У меня была такая же проблема. У меня есть собственное фоновое изображение, и я не хочу создавать варианты этого фонового изображения, потому что было бы утомительно представлять все различные состояния.
Итак, я хочу сделать очевидную вещь: иметь полупрозрачную полосу, которая накладывается поверх выделенного элемента списка, и когда пользователь нажимает клавишу «Ввод» или что-то еще, она мигает до нажатого цвета наложения, который больше эффектный и несколько более непрозрачный.
Решением было держаться подальше от любых @color или @drawable, которые ссылаются на цвет внутри listSelector. Я создал два файла .png размером 3x3 пикселя. Каждый сохранен с гамма-слоем. В моем случае это два одинаковых цвета, каждый из которых смешан в GIMP с разной прозрачностью на цветном слое.Таким образом, когда вы выбираете элемент, вы получаете оверлей с цветом 25%, а когда вы нажимаете на него, вы получаете png с цветом 50%. Я поместил их в свои чертежи как bg_list_item_pressed.png и bg_list_item_highlighted.png
Затем я установил свой селектор списка на:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<!-- Selected -->
<item
android:state_focused="true"
android:state_pressed="false"
android:drawable="@drawable/bg_list_item_highlighted" /> <!-- @drawable/tab_focus -->
<!-- Pressed -->
<item
android:state_pressed="true"
android:drawable="@drawable/bg_list_item_pressed" /> <!-- @drawable/tab_press -->
</selector>
Затем я добавил свои атрибуты listSelector в свой ListView в моем макете xml:
android:listSelector="@drawable/list_selector"
android:drawSelectorOnTop="true"
Теперь он работает именно так, как Я хочу, чтобы это сработало. В том числе с помощью крестовины для выбора строки и щелчка по ней с вводом. Получение мелирования и последующего нажатия цветов именно такими, какими они должны быть.
Селектор списка - это StateListDrawable
- он содержит ссылку на несколько рисунков для каждого состояния списка, которые можно выбрать, сфокусировать, нажать, отключить....
- в вашем случае, установив один цвет, список рисуется #9000 для каждого состояния.
Необходимо определить StateListDrawable
, как описано выше, с использованием XML, аналогичного приведенному ниже. Это то, что установлено в атрибуте android:listSelector
.
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_enabled="false" android:state_focused="true"
android:drawable="@drawable/item_disabled" />
<item android:state_pressed="true"
android:drawable="@drawable/item_pressed" />
<item android:state_focused="true"
android:drawable="@drawable/item_focused" />
</selector>
Или, чтобы установить один и тот же селектор списков для всех списков в вашем приложении, вы можете переопределить селектор в теме Widget.ListView
:
<style name="Widget.ListView" parent="Widget.AbsListView">
<item name="android:listSelector">@drawable/my_custom_selector</item>
</style>