В отображаемом списке состояний Android игнорируется state_focused
Мое приложение Android, которое использует TabActivity для отображения своего содержимого, имеет 4 вкладки, все из которых используют список состояний, который можно нарисовать для значка. Все они имеют одинаковую структуру, только с разными изображениями:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/icon_options_dark" android:state_selected="true" android:state_focused="false" />
<item android:drawable="@drawable/icon_options_white" />
</selector>`
Однако при выборе вкладок с помощью трекбола в моем HTC Desire (зеленая подсветка) вместо светлого используется темное изображение. Как только вкладка фактически выбрана, она становится белой. Что я делаю неправильно?
1 ответ
Вам нужно иметь разные предметы для разных состояний. Объединение нескольких состояний в одном предмете (как вы это сделали) определенно неправильно. Ваш XML может выглядеть так:
<xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/icon_options_dark"
android:state_selected="true" />
<item android:drawable="@drawable/icon_options_light"
android:state_focused="true" />
<item android:drawable="@drawable/icon_options_white" />
</selector>
Когда дело доходит до рисования вашего рисованного объекта, сначала проверяется его состояние. Если он выбран, будет использован первый элемент, и все - целенаправленная проверка не будет выполняться (Android находит только первое - не "наиболее релевантное" - состояние). Но если он не выбран, будет выполнена проверка на сфокусированное состояние.