Hatena::ブログ(Diary)

モンテカットの開発日記

2012-03-14

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のバージョンを上げることはできない。

f:id:MonteCut:20120314145915p:image:w360

<uses-sdk android:minSdkVersion="7" android:targetSdkVersion="7" /> のメニューボタン。

f:id:MonteCut:20120314150229p:image:w360

<uses-sdk android:minSdkVersion="7" android:targetSdkVersion="7" /> でメニューを開いたとき。

f:id:MonteCut:20120314145916p:image:w360

<uses-sdk android:minSdkVersion="7" android:targetSdkVersion="15" /> ではメニューボタンが出ない。

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

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

f:id:MonteCut:20120314145918p:image:w360

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

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

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/MonteCut/20120314/1331705765
リンク元
Connection: close