Как открыть меню опций программно? - PullRequest
56 голосов
/ 28 июня 2010

Я хотел бы открыть меню параметров программно, не нажимая на кнопку меню со стороны пользователя. Как бы я это сделал?

Ответы [ 11 ]

92 голосов
/ 28 июня 2010

Или просто позвоните Activity.openOptionsMenu () ?

31 голосов
/ 19 апреля 2012

Видимо, это делается в приложении onCreate breaks, поскольку Activity еще не прикреплена к окну. Если вы делаете это так:

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

... это работает.

16 голосов
/ 05 июля 2015

Для разработчиков, использующих новый Toolbar класс Support Library, вот как это делается:

Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
toolbar.showOverflowMenu();
11 голосов
/ 03 ноября 2011

Поместите эту строку кода в свой onResume (), это должно помочь!

new Handler().postDelayed(new Runnable() { 
   public void run() { 
     openOptionsMenu(); 
   } 
}, 1000); 
8 голосов
/ 27 октября 2013

из OnClickListener внутри действия, называемого MainActivity:

MainActivity.this.openOptionsMenu();
5 голосов
/ 19 ноября 2016

при использовании AppCompatActivity

getSupportActionBar().openOptionsMenu();
1 голос
/ 28 июня 2010

Два способа сделать это:

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);
0 голосов
/ 30 мая 2017
toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);
    toolbar.setTitleTextColor(0xFFFFFFFF);

    new Handler().postDelayed(new Runnable() {
        @Override
        public void run() {
            toolbar.showOverflowMenu();
        }
    }, 100);
0 голосов
/ 30 мая 2017

Для меня объявление toolbar.showOverflowMenu() в onClick не работает.openOptionsMenu() также не работает для меня.Вместо этого у меня работает следующий способ:

new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {
                toolbar.showOverflowMenu();
            }
        }, 500);
0 голосов
/ 11 января 2017

После долгих исследований и множества попыток единственным способом, по-видимому, является моделирование 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);
...