禁用带有图标的按钮
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>
我有一个简单的按钮,它有一个可绘制对象设置为图标:
<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>