У меня была такая же проблема. У меня есть собственное фоновое изображение, и я не хочу создавать варианты этого фонового изображения, потому что это было бы утомительно представлять все различные состояния.
Итак, я хочу сделать очевидную вещь, иметь полупрозрачную полосу, которая накладывается сверху на сфокусированный элемент списка, и когда пользователь нажимает клавишу «Ввод» или что-то еще, он мигает в нажатом цвете наложения, который больше поразительный и несколько более непрозрачный.
Решение состояло в том, чтобы держаться подальше от любого @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"
Теперь это работает именно так, как я хочу, чтобы это работало. В том числе с помощью D-панели, чтобы выбрать строку, и нажмите на нее с Enter. Получение цвета выделения и последующего нажатия точно такими, какими они должны быть.