禁用带有图标的按钮

Disabling a Button with an icon

我有一个简单的按钮,它有一个可绘制对象设置为图标:

<Button
     android:id="@+id/bOk"
     android:drawableStart="@drawable/icon_ok"
     android:text="@string/ok"
     android:layout_width="wrap_content"
     android:layout_height="wrap_content" />

当我在 XML 布局文件中禁用按钮时:android:enabled="false"

或以编程方式:bOk.setEnabled(false);

按钮被禁用,它是'grayed out',但图标保持在启用状态。

怎么看,那个图标也是'grayed out'?

与常规 Button 一样,具有图像背景的 Button 在禁用时不会变灰。

您必须使用另一个显示为灰色的图像。

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_enabled="false"
        android:drawable="@drawable/button_gray" /> ***button_gray is a Drawable image***
    <item android:state_pressed="true"
        android:drawable="@drawable/button_gray" /> 
    <item android:drawable="@drawable/button_red" /> ***button_red is a Drawable image*** 
</selector>

创建一个新的灰色图标并将两者都添加到 selector.xml:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:drawable="@drawable/icon_ok" android:state_enabled="true" />
    <item android:drawable="@drawable/icon_ok_disabled" android:state_enabled="false" />

</selector>

像这样使用内部按钮:android:drawableStart="@drawable/selector"


对于 TextColor,

res/color/mycustomtextcolor.xml 中创建另一个选择器:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
  <item android:color="#666" android:state_enabled="false" /> 
  <item android:color="#000" android:state_enabled="true"/>
</selector>

在您的小部件调用中使用:android:textColor="@color/mycustomtextcolor"

在您的 style 中添加另一个项目,使用:<item name="android:textColor">@color/mycustomtextcolor</item>

您可以使用带位图的选择器在启用和禁用状态下为可绘制对象着色:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_enabled="false">
        <bitmap android:src="@drawable/icon_ok" android:tint="@color/disableColorWithAlpha" />
    </item>
    <item android:state_enabled="true">
        <bitmap android:src="@drawable/icon_ok" android:tint="@color/colorAccent" />
    </item>
</selector>