我知道有相似的帖子,但我找不到任何一个答案。所以,我有这个可绘制的XML:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_enabled="true">
<bitmap
android:src="@drawable/bm_btn_background"
android:tileMode="repeat"
android:gravity="center" />
</item>
<item android:state_enabled="true">
<shape android:shape="rectangle">
<gradient
android:startColor="#a0e0b071"
android:endColor="#a0a67637"
android:angle="270" />
<stroke
android:width="1dp"
android:color="#5c3708" />
<corners
android:radius="5dp" />
<padding
android:left="10dp"
android:top="10dp"
android:right="10dp"
android:bottom="10dp" />
</shape>
</item>
<item android:state_pressed="true" >
<shape>
<gradient
android:startColor="#a0a67637"
android:endColor="#a0e0b071"
android:angle="270" />
<stroke
android:width="1dp"
android:color="#5c3708" />
<corners
android:radius="5dp" />
<padding
android:left="10dp"
android:top="10dp"
android:right="10dp"
android:bottom="10dp" />
</shape>
</item>
我正在尝试创建一个按钮,其中重复的图像作为背景并应用了渐变。使用此代码我只能看到背景图像,而不是渐变,边框和圆角。此外,当我单击按钮时,它不会更改(渐变应该更改)。我不知道这段代码有什么问题?如果我使用图层列表代替选择器,我会得到所需的结果,但是当我按下按钮时它也不会改变。谢谢你的帮助!
答案 0 :(得分:48)
您的选择器代码错误,因为:
您有两个相同状态的元素,并且选择器遇到state_enabled
元素的第一个状态(Bitmap
),它将停在那里,您的渐变将永远不会出现(为此你应该使用layer-list
作为Bitmap
和渐变顶部的项目
选择器将按顺序匹配状态。当您按Button
时,永远不会激活state_pressed
,因为选择器将首先匹配第一个元素上的state_enabled
(为此,您应移动{{1}的代码在state_enabled元素之上)。
事实上,您应该删除state_pressed
并让state_enabled
+ Bitmap
成为gradient
的默认值。贝娄是你的选择器(我假设你只想改变图像上的渐变(但是图像应该出现在按下状态,如果这不是想要的行为,只留下Button
的渐变)):
state_pressed
答案 1 :(得分:0)
在我的情况下,我正在使用它。试试吧
<item android:state_pressed="true">
<shape>
<solid android:color="@color/mediumGray" />
<stroke
android:width="1px"
android:color="@color/darkGray" />
<padding
android:bottom="2dp"
android:left="1dp"
android:right="1dp"
android:top="2dp" />
<corners
android:bottomLeftRadius="7sp"
android:bottomRightRadius="7sp"
android:topLeftRadius="7sp"
android:topRightRadius="7sp" />
</shape>
</item>
<item android:state_focused="true">
<shape>
<solid android:color="@color/mediumGray" />
<stroke
android:width="1px"
android:color="@color/darkGray" />
<padding
android:bottom="2dp"
android:left="1dp"
android:right="1dp"
android:top="2dp" />
<corners
android:bottomLeftRadius="7sp"
android:bottomRightRadius="7sp"
android:topLeftRadius="7sp"
android:topRightRadius="7sp" />
</shape>
</item>
<item>
<shape>
<solid android:color="@color/lightGray" />
<stroke
android:width="1px"
android:color="@color/blackTransparent" />
<padding
android:bottom="2dp"
android:left="1dp"
android:right="1dp"
android:top="2dp" />
<corners
android:bottomLeftRadius="7sp"
android:bottomRightRadius="7sp"
android:topLeftRadius="7sp"
android:topRightRadius="7sp" />
</shape>
</item>
答案 2 :(得分:0)
查看您的州属性
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<!-- Non focused states -->
<item android:drawable="@drawable/nicebuttonround" android:state_focused="false" android:state_pressed="false" android:state_selected="false"/>
<item android:drawable="@drawable/nicebuttonround" android:state_focused="false" android:state_pressed="false" android:state_selected="true"/>
<!-- Focused states -->
<item android:drawable="@drawable/nicebuttonroundi" android:state_focused="true" android:state_pressed="false" android:state_selected="false"/>
<item android:drawable="@drawable/nicebuttonroundi" android:state_focused="true" android:state_pressed="false" android:state_selected="true"/>
<!-- Pressed -->
<item android:drawable="@drawable/nicebuttonroundi" android:state_pressed="true" android:state_selected="true"/>
<item android:drawable="@drawable/nice22i" android:state_pressed="true"/>
</selector>
要将背景重复为图像,您只需创建9个音高图像。
答案 3 :(得分:0)