gpt4 book ai didi

android - 使用带有可检查选项菜单项和 state_checked 的 ColorStateList

转载 作者:太空狗 更新时间:2023-10-29 15:26:27 25 4
gpt4 key购买 nike

我的选项菜单包含以下项目:

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com