Android 使用带有可检查选项菜单项的ColorStateList,并将其状态设置为选中
“我的选项”菜单中填充了以下项目:Android 使用带有可检查选项菜单项的ColorStateList,并将其状态设置为选中,android,android-support-library,android-optionsmenu,Android,Android Support Library,Android Optionsmenu,“我的选项”菜单中填充了以下项目: <item android:id="@+id/menu_bus" android:checkable="true" android:checked="true" android:icon="@drawable/icon_bus" android:title="@string/bus" app:showAsAction="ifRoom"/> 正如您所看到的,我的目标是使用支持库v22.1的功能,在旧版
<item
android:id="@+id/menu_bus"
android:checkable="true"
android:checked="true"
android:icon="@drawable/icon_bus"
android:title="@string/bus"
app:showAsAction="ifRoom"/>
正如您所看到的,我的目标是使用支持库v22.1的功能,在旧版本的android中为小部件着色
颜色定义如下:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:color="@color/accent" android:state_checked="true"/>
<item android:color="@color/secondary_text"/>
</selector>
我试图将选择器切换到按下的状态:这一个有效!触摸菜单项时,颜色会发生变化
那么为什么ColorStateList
不能与选项菜单项上选中的状态一起工作呢
附言:使用这个工具:
int colorId = item.isChecked() ? R.color.accent : R.color.secondary_text;
int color = getResources().getColor(colorId);
DrawableCompat.setTint(d, color);
但显然我想要更优雅的东西。它可能不起作用,因为您的Drawable
没有实现checkeable
接口-菜单项是要检查的。根据文档,
您必须手动指示选中状态,例如
if(item.isCheckable()) {
int[] state = {item.isChecked() ? android.R.attr.state_checked : android.R.attr.state_empty};
item.getIcon().setState(state);
}
int colorId = item.isChecked() ? R.color.accent : R.color.secondary_text;
int color = getResources().getColor(colorId);
DrawableCompat.setTint(d, color);
if(item.isCheckable()) {
int[] state = {item.isChecked() ? android.R.attr.state_checked : android.R.attr.state_empty};
item.getIcon().setState(state);
}