长期阅读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模拟器和运行在Oracle VirtualBox上的Android x86上都可以看到这种行为。知道为什么会这样吗?
用下面的代码定义一个选择器,并尝试将其作为背景:
<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>
不是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 平台 android-8 res 可拉的 数据btn_default.xml