it-swarm.com.de

Wie kann ich das Optionsmenü programmgesteuert öffnen?

Ich möchte das optionsMenu programmgesteuert öffnen, ohne vom Benutzer auf die Menütaste zu klicken. Wie würde ich das machen?

55
BlaBRA

Oder einfach Activity.openOptionsMenu () aufrufen?

90
Robby Pond

Offensichtlich macht dies in onCreate eine Unterbrechung der App, da die Aktivität noch nicht an ein Fenster angehängt ist. Wenn du es so machst:

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

...Es klappt.

31
Kovač

Für Entwickler, die die neue Toolbar-Klasse von Support Library verwenden, geschieht dies folgendermaßen:

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

Fügen Sie diese Zeile in Ihr onResume () ein, dies sollte helfen!

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

von einem OnClickListener innerhalb einer Aktivität namens MainActivity:

MainActivity.this.openOptionsMenu();
8
Oded Breiner

wenn Sie AppCompatActivity verwenden

getSupportActionBar().openOptionsMenu();
5
Abhijit

Zwei Möglichkeiten, dies zu tun: 

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

Das Argument event ist eine KeyEvent, die die zum Öffnen des Menüs verwendete Taste beschreibt. Sie kann die Anzeige des Menüs je nach Tastaturtyp ändern. 

Oder ... indem Sie simulieren, dass der Benutzer die Taste gedrückt hat:

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

Wenn Sie sich in Ihrer Sicht befinden, können Sie schreiben

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

Die Erklärung von toolbar.showOverflowMenu() in onClick funktioniert für mich nicht. openOptionsMenu() hat bei mir auch nicht funktioniert. Stattdessen wird der folgende Weg für mich gearbeitet:

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

Nach langen Nachforschungen und vielen Versuchen scheint der einzige Weg die Simulation einer KeyEvent zu sein. Das Optionsmenü wird angezeigt:

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