Кнопка всегда отображается с первым перечисленным стилем в списке состояний, независимо от его состояния. - PullRequest
2 голосов
/ 30 ноября 2011

Долгое время считыватель stackoverflow, первый раз с вопросом. Возникающая у меня проблема кажется глупой, но я не могу найти информацию, которая бы это объясняла.

Я новичок в программировании на Android и работаю над проектом с пользовательским фоном кнопок. Я использую списки состояний для разных кнопок, которые выглядят так:

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


<item>
    <bitmap android:src="@drawable/button_pressed_background" android:gravity="center"/>
    android:state_pressed="true"
</item>

<item>
    <bitmap android:src="@drawable/button_focused_background" android:gravity="center"/>
    android:state_focused="true"
</item>

 <item>
    <bitmap android:src="@drawable/button_standard_background" android:gravity="center"/>
    android:state_pressed="false"
    android:state_focused="false"
</item>


</selector>

В xml, где кнопки объявлены, я просто добавляю строку android:background="@drawable/button_drawable", где button_drawable.xml - это список состояний, который можно нарисовать.

Кажется достаточно простым, но во всех случаях кнопки отображаются с фоном, указанным в первом разделе <item> списка состояний, независимо от их состояния. На самом деле, в приведенном выше примере я мог бы изменить первый раздел <item>, чтобы вместо него включить android:state_pressed="false", а button_pressed_background по-прежнему отображается! Это как если бы все состояния кнопок были истинными и ложными одновременно.

Я занимаюсь разработкой с использованием эмуляторов, но вижу такое поведение как с эмулятором AVD, так и с Android x86, работающим на Oracle VirtualBox. Есть идеи, почему это произойдет?

Ответы [ 3 ]

1 голос
/ 30 ноября 2011
0 голосов
/ 30 ноября 2011

Иц не android:src, его android:drawable

<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_window_focused="false" android:state_enabled="true"
    android:drawable="@drawable/btn_new_default" />    
<item android:state_pressed="true" 
    android:drawable="@drawable/btn_new_default_pressed" />
<item android:state_focused="true" android:state_enabled="true"
    android:drawable="@drawable/btn_new_default" />
<item android:state_enabled="true"
    android:drawable="@drawable/btn_new_default" />

Для дополнительных действий получите исходный файл с

буквой диска: \ android-sdk-windows_new \ платформы \ андроид-8 \ Data \ рес \ вытяжке \ btn_default.xml

0 голосов
/ 30 ноября 2011

Определите селектор с помощью приведенного ниже кода и попробуйте его в качестве фона:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_focused="true" android:state_pressed="true" android:drawable="@drawable/background_sel"/>
    <item android:state_focused="false" android:state_pressed="true" android:drawable="@drawable/background_sel"/>
    <item android:state_focused="true" android:drawable="@drawable/background_sel"/>
    <item android:state_focused="false" android:state_pressed="false" android:drawable="@drawable/background_normal"/>
</selector>
...