Menú emergente en el clic de un botón en la barra de acción

Estoy tratando de implementar una barra de acción en la que uno de los botones de clic muestra un menú emergente. Aquí está el menú. XML (elementos de menú en la barra de acción)

<menu xmlns:android="http://schemas.android.com/apk/res/android" > <item android:id="@+id/search" android:icon="@drawable/ic_action_search" android:orderInCategory="0" android:showAsAction="always" android:title="@string/menu_search"/> <item android:id="@+id/refresh" android:icon="@drawable/ic_action_refresh" android:orderInCategory="1" android:showAsAction="always" android:title="@string/menu_refresh"/> <Item android:id="@+id/popup" android:icon="@drawable/ic_action_search" android:onClick="showPopup" android:orderInCategory="1" android:showAsAction="always" android:title="@string/menu_search" /> 

Deseo mostrar un menú emergente en el tecleo del artículo que tiene id "@ + id / popup".

Aquí está el XML para el menú emergente

 <menu xmlns:android="http://schemas.android.com/apk/res/android" > <item android:id="@+id/item1" android:icon="@drawable/ic_action_search" android:orderInCategory="0" android:showAsAction="always" android:title="@string/menu_search"/> <item android:id="@+id/item2" android:icon="@drawable/ic_action_search" android:orderInCategory="1" android:showAsAction="always" android:title="@string/menu_search"/> 

Aquí está el método onClick para el botón

 public void showPopup(View v) { PopupMenu popup = new PopupMenu(this, v); MenuInflater inflater = popup.getMenuInflater(); inflater.inflate(R.menu.overflow, popup.getMenu()); popup.show(); } 

Y el problema es que no aparece ninguna ventana emergente al hacer clic en ese botón. Necesito ayuda.

Hola cada uno, que es mi propia solución: he creado el método showPopup, y luego lo llamé en el onOptionsItemSelected como este:

 public void showPopup(){ View menuItemView = findViewById(R.id.menu_save); PopupMenu popup = new PopupMenu(getActivity(), menuItemView); MenuInflater inflate = popup.getMenuInflater(); inflate.inflate(R.menu.popup, popup.getMenu()); popup.show(); } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.menu_save: showPopup(); return true; default: return super.onOptionsItemSelected(item); } } 

Popup.xml

 <menu xmlns:android="http://schemas.android.com/apk/res/android" > <item android:id="@+id/decon" android:showAsAction="ifRoom" android:title="@string/decon"/> <item android:id="@+id/mRes" android:showAsAction="ifRoom" android:title="@string/mesRes"/> </menu> 

Main.xml => se llama onCreateOptionsMenu

 <menu xmlns:android="http://schemas.android.com/apk/res/android" > <item android:id="@+id/menu_save" android:enabled="true" android:icon="@drawable/action_save" android:showAsAction="ifRoom|withText" android:title="@string/action_save" android:visible="true"/> </menu> 

Finalmente yo

 implements PopupMenu.OnMenuItemClickListener to @Override onMenuItemClick method. 

Encontré esto aquí: http://developer.android.com/guide/topics/ui/menus.html

 <menu xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@+id/selectImg" android:icon="@android:drawable/ic_dialog_dialer" android:showAsAction="always"> <menu> <item android:id="@+id/top" android:title="@string/topimg"/> <item android:id="@+id/bottom" android:title="@string/botimg" /> </menu> </item> </menu> 

Puede colocar un menú dentro de un menú para presentar submenús cuando se hace clic en el elemento. A continuación, en Java, puede utilizar los mismos métodos como de costumbre.

 @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu items for use in the action bar MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.main, menu); return super.onCreateOptionsMenu(menu); } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle presses on the action bar items // View v = findViewById(R.id.f); switch (item.getItemId()) { case R.id.top: //action return true; default: return super.onOptionsItemSelected(item); } } 

El id de 'top' en el xml sigue siendo reconocido aunque sea un submenú. Esto funcionó para mí y se ve como el menú emergente.

Como el menú emergente es un MENÚ, usted tiene que manejar esto mediante la implementación de "onOptionsItemSelected". Podrá decir qué hacer para cada opción del menú. Reemplazará la opción "onClick" que ha definido y se llamará automáticamente.

Intenta cambiar 'this' a getActivity ().

 public void showPopup(View v) { PopupMenu popup = new PopupMenu(getActivity(), v); MenuInflater inflater = popup.getMenuInflater(); inflater.inflate(R.menu.overflow, popup.getMenu()); popup.show(); } 

Espero eso ayude..!!

 android:onClick="popup" 

Puede ser que usted debe cambiarlo a android:onClick="showPopup" ?

Encontré una solución a esto. En lugar de utilizar el menú XML para inflar el menú emergente, hice un archivo de diseño XML.

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/container" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="#8b8989" android:orientation="vertical" android:padding="10dip" > <TextView android:id="@+id/menuItem1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="10dip" android:text="@string/menu1" /> <TextView android:id="@+id/menuItem2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="10dip" android:text="@string/menu2" /> <TextView android:id="@+id/menuItem3" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="10dip" android:text="@string/menu3" /> </LinearLayout> 

Y cambié el método onClick

 public void showPopup(View v) { LayoutInflater inflater = (LayoutInflater) MainActivity.this .getSystemService(Context.LAYOUT_INFLATER_SERVICE); PopupWindow pw = new PopupWindow(inflater.inflate( R.layout.overflow_layout, null, false), 300, 400, true); pw.showAtLocation(findViewById(R.id.container), Gravity.CENTER, 0, 0); } 

Esto resolvió el problema

  • Recuerda la contraseña emergente en el problema de la vista web de Android
  • Mostrar un PopupWindow centralizado
  • Cierre del Popup en Android
  • Problema emergente del menú Hardware con Appcompat
  • Android con la cabeza de flecha
  • Cómo construir un comentario de Facebook como pop-up en android?
  • android PopupWindow de un fragmento
  • Color de fondo del menú de opciones de la barra de herramientas
  • Android PayPalActividad no en pantalla completa
  • Diálogos y ventanas emergentes en Android
  • Cómo mostrar javascript popup en android webview
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.