Detectar haga clic en el botón de menú Desbordamiento de la barra de acciones
¿Puedo detectar clic / toque en el botón de menú de la barra de acción, es decir, se utiliza para mostrar elementos de menú de desbordamiento?
De forma predeterminada, abre la lista con un elemento "Configuración". Aquí está la captura de pantalla:
- Cambiar programaticamente las pestañas en Android mediante ActionBarSherlock
- Visualización de iconos para los elementos de menú de la barra de acción de Honeycomb android 3.0
- ActionBar - vista personalizada con ImageView centrado, Acción Items en los lados
- Android: muestra los elementos del menú de la barra de acción según ViewPager
- Barra de Acción Contextual en Honeycomb
Hasta ahora está detectando clic en "2" pero quiero detectar clic en "1".
- ¿Cómo implementar el evento de clic en el icono de la barra de herramientas?
- ActionBarSherlock: ¿cómo acceder a la vista del botón de inicio?
- Agregar el widget Switch a ActionBar y responder al evento de cambio
- Barra de Acción - Botón de Menú - Falta
- ActionBarSherlock: Mostrar / ocultar los botones de elemento de acción mediante una llamada de método de programación
- El selector de dispositivos Android muestra la X roja en la columna de destino
- ¿Cuáles son los problemas comunes al migrar de ActionBarSherlock a ActionBarCompat?
- ActionBar / Barra de herramientas no se muestra en la versión de Lollipop de la aplicación
Para detectar el clic en el menú de desbordamiento tiene tal código:
@Override public boolean onMenuOpened(int featureId, Menu menu) { if(featureId == AppCompatDelegate.FEATURE_SUPPORT_ACTION_BAR && menu != null){ //overflow menu clicked, put code here... } return super.onMenuOpened(featureId, menu); } @Override public void onPanelClosed(int featureId, Menu menu) { ... }
Para detectar haga clic en los elementos del menú, en caso de que tenga un menú como ese:
<?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@+id/menu2" android:alphabeticShortcut="b" android:title="Menu No. 2" android:orderInCategory="2"> <menu > <group android:id="@+id/group2" android:checkableBehavior="single"> <item android:id="@+id/submenu1" android:title="SubMenu No. 1" /> <item android:id="@+id/submenu2" android:title="SubMenu No. 2" /> </group> </menu> </item> </menu>
Debe ser capaz de detectar el clic en
OnOptionsItemSelected
@Override public boolean onOptionsItemSelected(MenuItem item) { Log.w("ANDROID MENU TUTORIAL:", "onOptionsItemSelected(MenuItem item)"); // Handle item selection switch (item.getItemId()) { case R.id.menu2: Toast.makeText(this, "Clicked: Menu No. 2", Toast.LENGTH_SHORT).show(); return true; ... }
Finalmente encontré la solución. Anular FragmentActivity.onKeyDown
@Override public boolean onKeyDown(int keyCode, KeyEvent event) { // TODO Auto-generated method stub switch (keyCode) { case KeyEvent.KEYCODE_MENU: // Do Sometihng break; default: break; } return super.onKeyDown(keyCode, event); }
De forma predeterminada, haciendo clic en el botón de desbordamiento se muestra el menú de opciones, así que creo que debe manejar interceptar el evento y luego hacer lo que quiera por sobreescribir Activity.onPrepareOptionsMenu
Esto fue un poco complicado, ya que no pude encontrar una identificación para el botón de desbordamiento, por lo que he utilizado este hack. En su Activity
:
private boolean actionBarClicked = false; @Override public boolean onOptionsItemSelected (MenuItem item) { if (item.getId() == ) actionBarClicked = true; return false; // Let default processing occur } @Override public boolean onPrepareOptionsMenu (Menu menu) { if (actionBarClicked) { // Overflow button of ActionBar was clicked, do what you want here. actionBarClicked = false; } ... }