ページ

2014/04/25

Androidアプリ開発:物理メニューボタンがある場合でも、オーバーフローメニューを表示する方法

アクションバー(ActionBar)にメニューを複数表示した場合、表示するスペースのなかったメニューが自動的にオーバーフローメニュー(OverflowMenu)にまとめられます。

しかし、この機能には機種依存があり、物理メニューボタンがない場合のみにオーバフローメニューが表示されます。
(物理メニューボタンのある機種は、そのボタンを押せば表示されていないメニューを開くことが出来ます。)




ただし、私のように物理メニューボタンの有無でレイアウトを変えたくないという場合があると思います。

常に表示させる方法を下に記述します。


物理メニューボタンの有無で判断しているので、下記のように宣言してあげれば常にオーバーフローメニューをアクションバー上に表示させることが出来ます。


@Override
protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 try {
            ViewConfiguration config = ViewConfiguration.get(this);
            Field field = ViewConfiguration.class.getDeclaredField("sHasPermanentMenuKey");
            if(field!=null) {// 端末にメニューボタンがあるか確認
                field.setAccessible(true);// フィールドアクセスを許可
                field.setBoolean(config, false);// 端末には物理メニューボタンがない(false)として設定
            }
        } catch(Exception e) {
            e.printStackTrace();
        }
}


これを記述しても表示されない機種も存在しているようです。
私のSHL22にテストしてみたのですが、オーバーフローメニューとして表示されず、物理メニューボタンを押すことで表示されました。


おまけ

showAsAction属性
never  常にアクションバーに表示しない
always  常にアクションバーに表示
ifRoom  アクションバーにスペースがあればメニューを表示
withText  アクションバーにスペースがあればアイコンと共にタイトルを表示
collapseActionView  …

1 件のコメント:

  1. Casino Games | JM Hub
    With over 200 table games available, this 당진 출장안마 is a 경산 출장안마 sure bet! 포천 출장샵 Play the classic 3-Card Poker game of chance for all players to 전라북도 출장안마 take 경산 출장마사지 their first spin with your

    返信削除