android aplicaciones - ¿Cómo abrir el menú de opciones programáticamente?




pdf manual (10)

Me gustaría abrir las opciones del menú mediante programación sin hacer clic en la tecla de menú del usuario. ¿Como podría hacerlo?


Answers

Si estás dentro de una vista, puedes escribir

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

toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);
    toolbar.setTitleTextColor(0xFFFFFFFF);

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

Ponga esta línea de código en su onResume (), ¡esto debería ayudar!

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

Para mí, declarar toolbar.showOverflowMenu() en onClick no funciona. openOptionsMenu() tampoco funcionó para mí. En vez de eso, me funciona la siguiente manera,

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

Para los desarrolladores que usan la nueva clase de Toolbar de Toolbar de la Support Library , así es como se hace:

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

desde un OnClickListener dentro de una actividad llamada MainActivity:

MainActivity.this.openOptionsMenu();

Al parecer, hacerlo en la aplicación onCreate breaks, ya que Activity aún no está adjunta a una ventana. Si lo haces así:

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

...funciona.


Después de una larga investigación y muchos intentos, la única forma parece ser simular un KeyEvent . Esto hace que aparezca el menú de opciones:

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

si usa AppCompatActivity

getSupportActionBar().openOptionsMenu();

Código Kotlin:

salvar:

override fun onSaveInstanceState(outState: Bundle) {
    super.onSaveInstanceState(outState.apply {
        putInt("intKey", 1)
        putString("stringKey", "String Value")
        putParcelable("parcelableKey", parcelableObject)
    })
}

y luego en onCreate()oonRestoreInstanceState()

    val restoredInt = savedInstanceState?.getInt("intKey") ?: 1 //default int
    val restoredString = savedInstanceState?.getString("stringKey") ?: "default string"
    val restoredParcelable = savedInstanceState?.getParcelable<ParcelableClass>("parcelableKey") ?: ParcelableClass() //default parcelable

Agrega valores predeterminados si no quieres tener Opcionales





android button menu android-activity