2013-09-21

Androidナビゲーションバーにオーバーフローボタンを無理やり表示

レガシーアプリ互換性のためのアレ。targetSdkVersionをあげると表示されなくなるので、無理やり表示させてみる。
Androidアプリ開発ではよく使う?リフレクションを使用。setContentViewしてからWindowに隠しフラグをセットする。


public class HogeActivity extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.hoge);

        setLegacyOverflow(getWindow(), true);
    }


    void setLegacyOverflow(Window window, boolean enable) {
        try {
            int flag = WindowManager.LayoutParams.class.getField("FLAG_NEEDS_MENU_KEY").getInt(null);
            if (enable) {
                window.addFlags(i);
            } else {
                window.clearFlags(i);
            }

        } catch (NoSuchFieldException e) {
            // 2.3以下はフラグなし

        } catch (IllegalAccessException e) {
            // 使えなくなった...
        }
    }
}

参考:

http://android-developers.blogspot.jp/2012/01/say-goodbye-to-menu-button.html