Я нашел новый способ решить эту проблему с помощью растяжимой selector xml file. Вы просто создать селектор со значком вы хотите использовать в пункте меню, то вы можете либо изменить оттенок, альфа или оба из растрового изображения:
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_enabled="true">
<bitmap android:src="@drawable/ic_menu_item"
android:tint="@color/enabled_color"
android:alpha="@integer/enabled_alpha"/>
</item>
<item android:state_enabled="false">
<bitmap android:src="@drawable/ic_menu_item"
android:tint="@color/disabled_color"
android:alpha="@integer/disabled_alpha"/>
</item>
</selector>
В качестве примечания; Мне нравится установить оттенок "?android:attr/textColorPrimary"
для разрешенного состояния и "?android:attr/textColorHint"
для отключенного состояния. Таким образом, он будет регулироваться в зависимости от используемой темы.
Тогда вы можете просто установить значок в файле XML меню ресурса селекторного:
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item android:id="@+id/menu_action"
android:orderInCategory="0"
android:title="@string/title_menu_action"
android:icon="@drawable/ic_menu_item_selector"
app:showAsAction="ifRoom"/>
</menu>
Тогда при вызове item.setEnabled(enabled)
цвет и/или альфа значка будет меняться вместе с государство!
Принял и удалил свой собственный ответ. –
Действительно ли это изменяет цвет текста/названия пункта меню? То есть, серое это? Из того, что я понимаю, это повлияет только на значок. Что делать, если у вас нет значка и есть только текст? –
Вызов item.setEnabled() уже сделает текст серым. Проблема в том, что на Action Bars текст выделен серым цветом, но значок отсутствует - этот код выгружает его. –