无论状态如何,按钮始终以状态列表drawable中的第一个列出的样式显示

时间:2011-11-30 06:19:37

标签: android xml statelistdrawable

长时间的stackoverflow阅读器,第一次有问题。我遇到的问题似乎很愚蠢,但我找不到任何解释它的信息。

我是Android编程的新手,正在开发一个带有自定义按钮背景的项目。我正在使用状态列表drawables来显示如下所示的不同按钮:

<?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时都会看到这种行为。知道为什么会这样吗?

3 个答案:

答案 0 :(得分:1)

答案 1 :(得分:0)

使用以下代码定义选择器并将其作为背景尝试:

<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>

答案 2 :(得分:0)

Itz不是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 \ platforms \ android-8 \ data \ res \ drawable \ btn_default.xml