- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我的选项菜单包含以下项目:
<item
android:id="@+id/menu_bus"
android:checkable="true"
android:checked="true"
android:icon="@drawable/icon_bus"
android:title="@string/bus"
app:showAsAction="ifRoom"/>
这是我的onOptionsItemsSelected
:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
item.setChecked(!item.isChecked());
Log.d("test", "Item " + item + " is now checked: " + item.isChecked());
ColorStateList colorStateList = getResources().getColorStateList(R.color.options_menu_colors);
Drawable d = DrawableCompat.wrap(item.getIcon());
DrawableCompat.setTintList(d, colorStateList);
item.setIcon(d);
return true;
}
如您所见,我的目标是使用支持库 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>
但是 state_checked
不适用于复选框菜单项!
这是图标按下的日志:
D/test (11529): Item Bus is checked: false
D/test (11529): Item Bus is checked: true
D/test (11529): Item Bus is checked: false
D/test (11529): Item Bus is checked: true
我尝试将选择器切换为 state_pressed
:这个有效!触摸菜单项时,颜色会发生变化!
那么为什么 ColorStateList
不能与选项菜单项上的 state_checked
一起工作?
PS:使用这个有效:
int colorId = item.isChecked() ? R.color.accent : R.color.secondary_text;
int color = getResources().getColor(colorId);
DrawableCompat.setTint(d, color);
但显然我想要更优雅的东西。
最佳答案
根据文档Using checkable menu items ,您必须手动指示选中状态,例如
if(item.isCheckable()) {
int[] state = {item.isChecked() ? android.R.attr.state_checked : android.R.attr.state_empty};
item.getIcon().setState(state);
}
关于android - 使用带有可检查选项菜单项和 state_checked 的 ColorStateList,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29840585/
首先我要说我已经详细阅读了关于 SO 的几乎所有问题,我可以找到与自定义可检查列表项和选择器相关的问题。他们中的许多人都有类似的问题,但没有一个答案能解决我的问题。 在我的应用中,我展示了一个自定义列
我有一个可绘制状态列表选择器,需要在选中时显示不同的可绘制对象。 我扩展了使用带有接口(interface) Checkable 的 drawable 的 View 类,这工作正常。 但是,当我只对
Android Studio 2.0 预览 你好, 我有这个连接到 imageview 的选择器。我想打开和关闭 imageview。所以 off 会显示绿色,on 会显示红色。 但是,当我单击 im
我的选项菜单包含以下项目: 这是我的onOptionsItemsSelected: @Override public boolean onOptionsItemSelected(MenuItem i
我正在尝试在 RadioButton 中创建一个复选标记,如果未选中该按钮,该复选标记就会消失。但是,如果我将自定义复选标记放在 RadioButton 的 android:button 属性中,它似
我正在为按钮构建一个选择器,带有一个可绘制的状态列表, states.addState(new int[] {android.R.attr.state_checked},
为了让 Android ListView 做我想做的事,我不由得抓狂。 我希望在单选模式下拥有一个 ListView,其自定义行布局具有不同的背景颜色,用于选择、按下和选中(即选择由颜色而不是复选标记
我正在将自定义可绘制对象设置为复选框按钮, 但似乎只有 android:state_checked="true" 和 android:state_checked="false" 有效。 其他州不工作。
我是一名优秀的程序员,十分优秀!