奇怪的按钮行为 XML 选择器已启用
Strange button behavior XML selector enabled
我有一个必须动态 enabled/disabled 的按钮。选中右侧的开关时,必须启用该按钮。取消选中该开关时,必须禁用该按钮。我在 MVVMlight 中使用 Bindings 做到了这一点。
开关的默认状态是未选中的,因此必须禁用该按钮。
该按钮有自己的颜色状态列表,禁用时呈灰色,启用时呈蓝色。
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_enabled="false" android:color="@color/third_light_gray"/>
<item android:state_enabled="true" android:color="@color/light_blue"/>
</selector>
绑定工作正常,按钮按预期获得 enabled/disabled。
但是,按钮的默认状态应该是禁用的,但默认情况下它始终处于启用状态。
<Button
android:id="@+id/buttonListProtections"
...
android:enabled="false"
android:theme="@style/Gohy.Button" />
按钮样式:
<style name="Gohy.Button" parent="Widget.AppCompat.Button.Colored">
<item name="android:textColor">@color/white</item>
<item name="colorButtonNormal">@drawable/button_color_list</item>
<item name="android:padding">30dp</item>
</style>
我做错了什么?
将您的 selector.xml 更改为:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@color/light_blue" android:state_enabled="true"/>
<item android:drawable="@color/third_light_gray" android:state_enabled="false"/>
</selector>
并将您的样式修改为:
<style name="Gohy.Button" parent="Widget.AppCompat.Button.Colored">
<item name="android:textColor">@color/colorAccent</item>
<item name="android:background">@drawable/color_selector</item>
<item name="android:padding">30dp</item>
</style>
我通过这个 post 找到了问题的答案:
Android custom view ignoring `android:enabled` in XML?
由于显然无法 enable/disable 直接从 XML 查看,我不得不以编程方式进行设置。
我有一个必须动态 enabled/disabled 的按钮。选中右侧的开关时,必须启用该按钮。取消选中该开关时,必须禁用该按钮。我在 MVVMlight 中使用 Bindings 做到了这一点。
开关的默认状态是未选中的,因此必须禁用该按钮。
该按钮有自己的颜色状态列表,禁用时呈灰色,启用时呈蓝色。
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_enabled="false" android:color="@color/third_light_gray"/>
<item android:state_enabled="true" android:color="@color/light_blue"/>
</selector>
绑定工作正常,按钮按预期获得 enabled/disabled。 但是,按钮的默认状态应该是禁用的,但默认情况下它始终处于启用状态。
<Button
android:id="@+id/buttonListProtections"
...
android:enabled="false"
android:theme="@style/Gohy.Button" />
按钮样式:
<style name="Gohy.Button" parent="Widget.AppCompat.Button.Colored">
<item name="android:textColor">@color/white</item>
<item name="colorButtonNormal">@drawable/button_color_list</item>
<item name="android:padding">30dp</item>
</style>
我做错了什么?
将您的 selector.xml 更改为:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@color/light_blue" android:state_enabled="true"/>
<item android:drawable="@color/third_light_gray" android:state_enabled="false"/>
</selector>
并将您的样式修改为:
<style name="Gohy.Button" parent="Widget.AppCompat.Button.Colored">
<item name="android:textColor">@color/colorAccent</item>
<item name="android:background">@drawable/color_selector</item>
<item name="android:padding">30dp</item>
</style>
我通过这个 post 找到了问题的答案:
Android custom view ignoring `android:enabled` in XML?
由于显然无法 enable/disable 直接从 XML 查看,我不得不以编程方式进行设置。