web-dev-qa-db-ja.com

プログラムでオプションメニューを開く方法

ユーザーからメニューキーをクリックせずに、プログラムでoptionsMenuを開きたいです。どうすればいいですか?

56
BlaBRA

または、単に Activity.openOptionsMenu() ?を呼び出します

92
Robby Pond

どうやら、onCreateでそれを行うと、アクティビティがまだウィンドウに関連付けられていないため、アプリが中断します。あなたがそうするなら:

@Override
public void onAttachedToWindow() {
    openOptionsMenu(); 
};

...できます。

31
Kovač

Support Libraryの新しいToolbarクラスを使用する開発者の場合、次のようになります。

Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
toolbar.showOverflowMenu();
16
marmor

このコード行をonResume()に入れてください。これは役立つはずです!

new Handler().postDelayed(new Runnable() { 
   public void run() { 
     openOptionsMenu(); 
   } 
}, 1000); 
11
Royston Pinto

mainActivityと呼ばれるアクティビティ内のOnClickListenerから:

MainActivity.this.openOptionsMenu();
8
Oded Breiner

appCompatActivityを使用する場合

getSupportActionBar().openOptionsMenu();
5
Abhijit

それを行う2つの方法:

Activity.getWindow().openPanel(Window.FEATURE_OPTIONS_PANEL, event);

event引数は、メニューを開くために使用されるキーを説明するKeyEventです。これは、元のキーボードのタイプに基づいてメニューの表示方法を変更できます。

または...ユーザーがボタンを押したことをシミュレートして:

IWindowManager wManager = IWindowManager.Stub.asInterface(ServiceManager.getService("window"));
KeyEvent kd = new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_SOFT_LEFT);
KeyEvent ku = new KeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_SOFT_LEFT);
wManager.injectKeyEvent(kd.isDown(), kd.getKeyCode(), kd.getRepeatCount(), kd.getDownTime(), kd.getEventTime(), true);
1
Cristian

ビュー内にいる場合は、次のように記述できます

    ((Activity)getContext()).openOptionsMenu();
0
Fabio Bianconi

私にとって、onClickでtoolbar.showOverflowMenu()を宣言することはできません。 openOptionsMenu()も役に立たなかった。その代わりに、次の方法が私のために働いています、

new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {
                toolbar.showOverflowMenu();
            }
        }, 500);
0
Nanda Gopal
toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);
    toolbar.setTitleTextColor(0xFFFFFFFF);

    new Handler().postDelayed(new Runnable() {
        @Override
        public void run() {
            toolbar.showOverflowMenu();
        }
    }, 100);
0
Mukesh KrishMeg

長い研究と多くの試みの後、唯一の方法はKeyEventをシミュレートすることのようです。これにより、オプションメニューが表示されます。

BaseInputConnection mInputConnection = new BaseInputConnection( findViewById(R.id.main_content), true);
KeyEvent kd = new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_MENU);
KeyEvent ku = new KeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_MENU);
mInputConnection.sendKeyEvent(kd);
mInputConnection.sendKeyEvent(ku);
0
Lotfi