Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/224.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 使用带有可检查选项菜单项的ColorStateList,并将其状态设置为选中_Android_Android Support Library_Android Optionsmenu - Fatal编程技术网

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);
}