Мое меню опций заполняется такие элементы, как:Используйте ColorStateList с пунктом меню опции триггерной и state_checked
<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;
}
Как вы можете видеть, моя цель имеют виджет в старых версиях android, используя функцию библиотек поддержки v22.1.
Цвет определяется как таковой:
<?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);
Но, очевидно, я бы хотел что-то более элегантное.
Как это сделать? –