禁用带图标的按钮

时间:2018-01-05 10:02:28

标签: android android-button

我有一个简单的Button,它有一个drawable set as 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"

或programmaticaly:bOk.setEnabled(false);

该按钮被禁用,它显示为“灰显”,但图标保持为启用状态。

enter image description here

我怎样才能看到图标也“变灰”?

3 个答案:

答案 0 :(得分:5)

创建一个新的灰色图标,并将其添加到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>

答案 1 :(得分:2)

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

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

<?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>

答案 2 :(得分:1)

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

<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>