我的项目中有一个按钮,它的工作原理是这样的。
这个按钮有三个不同的设计,每个状态 - 禁用 (state_enabled="false"
),启用,按下。
如果没有选择文件,这个按钮仍然是禁用的,并且对它有一个特殊的设计。虽然,当选择文件时,这个按钮就会变成启用,并切换到不同的设计。而且每次启用和按下按钮时,都可以看到按钮的高光颜色。
到目前为止,我已经尝试了什么。
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/background_blue" android:state_enabled="true" />
<item android:drawable="@drawable/background_blue_white" android:state_enabled="false" />
<item android:drawable="@drawable/background_green" android:state_pressed="true" />
</selector>
我想要的是:
state_enabled="false"
和 state_enabled="true"
行得通,而 state_pressed="true"
不工作在所有。你认为我做错了什么?
如果我的解释很复杂,请告诉我--我会尽最大努力描述问题,让它尽可能地易于理解。非常感谢您。祝你有个愉快的一天
你应该让你的按钮 clickable
的。
你可以用 button.setClickable(true)
(如果你使用的是JAVA),或者你可以将你的 .xml
你有 android:clickable="true"
.
如果你使用的是Kotlin,那么添加 button.clickable = true
而不是使用Java代码的第一个解决方案。
更新。 你也应该试试这个东西. 按照 本回答 也许会有帮助。按照这个答案,你应该把所有的状态保持在适当的顺序。我不知道为什么,但我认为这应该有帮助。
试试这个,让我知道是否对你有帮助。谢谢& 快乐编码...!
也许你应该设置一个默认的颜色。
<item android:drawable="@drawable/background_blue" android:state_enabled="true" />
<item android:drawable="@drawable/background_blue_white" android:state_enabled="false" />
<item android:drawable="@drawable/background_green" android:state_pressed="true" />
<item android:drawable="@drawable/background_blue" />
默认颜色没有任何 "按下 "和 "启用 "的可绘制。
一个选择器将选择 第一 匹配当前状态的项目。
从 文件:
说明:: 记住,Android会应用状态列表中与对象当前状态相匹配的第一项。所以,如果列表中的第一项不包含上述任何状态属性,那么每次都会被应用,这就是为什么你的默认值应该总是最后一个(如下例所示)。
被按下的按钮也是启用的,所以你的选择器仍然会选择 "启用 "状态,而不是 "被按下 "状态,因为它是在前面定义的。
你可以尝试调整顺序来解决你的问题。
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/background_green" android:state_pressed="true" /> <!-- pressed -->
<item android:drawable="@drawable/background_blue_white" android:state_enabled="false" /> <!-- disabled -->
<item android:drawable="@drawable/background_blue" /> <!-- default -->
</selector>
为了避免将来出现这样的混乱,一个好的方法是更加具体,比如一次只匹配一个项目。这些项目使用原来的顺序,但每次只有一个项目会匹配。
<item android:drawable="@drawable/background_blue" android:state_enabled="true" android:state_pressed="false" />
<item android:drawable="@drawable/background_blue_white" android:state_enabled="false" android:state_pressed="false" />
<item android:drawable="@drawable/background_green" android:state_enabled="true" android:state_pressed="true" />
(请注意,最好在底部有一个默认值,因为现在技术上有可能是: 无 匹配)