簡體   English   中英

如何以編程方式打開選項菜單?

[英]How to open the options menu programmatically?

我想以編程方式打開optionsMenu,而無需單擊用戶的菜單鍵。 我該怎么辦?

或者只是調用Activity.openOptionsMenu()

顯然,在onCreate中執行此操作會中斷應用程序,因為Activity尚未附加到窗口。 如果你這樣做:

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

...有用。

對於使用Support Library的新Toolbar類的開發人員,這是如何完成的:

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

把這行代碼放在你的onResume()中,這應該有幫助!

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

來自名為MainActivity的活動內的OnClickListener:

MainActivity.this.openOptionsMenu();

如果使用AppCompatActivity

getSupportActionBar().openOptionsMenu();

兩種方法:

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);

如果你在你的視圖中,你可以寫

    ((Activity)getContext()).openOptionsMenu();

經過長時間的研究和許多嘗試,唯一的方法似乎是模擬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);

對我來說,在onClick中聲明toolbar.showOverflowMenu()是行不通的。 openOptionsMenu()也不適用於我。 而不是以下方式對我有效,

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM