openOptionsMenuで開いたメニューのアイテムを状態によって無効化したい場合、
onPrepareOptionsMenuで、
item.setEnabled(false);
のようにすればよいのだが、
こうすると、確かにメニューは押しても反応しなくなるのだが、
見た目がグレーアウトしない。
いろいろ調べたら、
menu - Is it possible to grey out (not just disable) a MenuItem in Android? - Stack Overflow
setColorFilterを使う方法や、setAlphaを使う方法で対処するようだ。
しかし、テキストのみのメニューアイテムには使えない。
上記のURLの最後に書いてあるが、
APIレベル < 14だと正しくグレーアウトされるようだ。
手元のAndroid 2.3の端末で試したらちゃんとグレーアウトされた。
APIレベル >= 14だとどうしたらよいかわからず。
試しに、コンパチブルライブラリのスタイルで
ActionBarの機能を使うように変更してみた。
styles.xmlのテーマを
<style name="AppTheme" parent="android:Theme.NoTitleBar">
から
<style name="AppTheme" parent="Theme.AppCompat.NoActionBar">
に変更。
おおっ!ちゃんとグレーアウトされるようになったよ。
ついでにメニューの表示のされ方も横に並んでたのが、縦に並ぶようになった。
デフォルトだとメニューの背景が透明で見にくかったので、
背景色を変更した。
<style name="AppTheme" parent="Theme.AppCompat.NoActionBar"> <!-- Customize your theme here. --> <item name="android:panelBackground">@android:color/background_dark</item> </style>
互換性を気にするなら、素直にコンパチブルライブラリを使ったほうがよさそうだ。