奇怪的按钮行为 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 查看,我不得不以编程方式进行设置。