Android 2.XのアプリをAndroid 3.Xや4.0でも動くようにするときの注意点(オプションメニュー)

Android 3.Xや4.0の端末にはオプションメニューを表示するためのハードキーがない。代わりにAction Barというメニュー用の新しいコンポーネントを画面上に表示させることが推奨されている。Creating an Options Menu

しかし、Action Barは場所をとるし、Action Barに載せるほど強調したくないメニューがあったため、これまでと同じようにメニューボタンが押されたらオプションメニューを表示させる方法を調べた。

一番ラクそうだったのが、戻るボタン、HOMEボタン、タスクボタン(アプリ切替ボタン)の横に、ソフトキーでメニューボタンを表示させる方法。といっても、これはActivityにオプションメニューがあれば自動的に表示される。最大の注意点は、AndroidManifest.xmlのtargetSdkVersionが、11(Android 3.0)より小さい数字になっていること。SDKのバージョンを上げるからって張り切って15(Android 4.0.3)とかにするとオプションメニューが表示されない。ただし、この方法だとSDKのバージョンを上げることはできない。


のメニューボタン。


でメニューを開いたとき。


ではメニューボタンが出ない。

ちなみに、できればSDKを使いたいなと思い、android:targetSdkVersionを15にして、オプションメニューっぽいボタンを自分で作って、以下のようにActivity.openOptionsMenuメソッドを呼んでみたが、メニューが画面下部にしか表示されないので諦めた。

mPopupMenuButton.setOnClickListener(new Button.OnClickListener() {
    public void onClick(View v) {
        openOptionsMenu();     // プログラム的にオプションメニューを開く
    }
});


上部の自分で作った画像ボタンをタップして、Activity.openOptionMenu()を呼び出すようにしても、メニューは画面下部にしか表示されない。

あとはリフレクションを使ってSDKバージョン11以降のPopupMenuを使うことも試したが、MenuItemが選択されたことを判別するためのリスナーとして匿名クラスPopupMenu.OnMenuItemClickListenerをインスタンス化するあたりで複雑になりすぎて挫折。