Mostrar menú emergente cuando se hace clic en el elemento de barra de acción

Introduzca aquí la descripción de la imagen

Cómo agregar un menú emergente cuando se hace clic en un elemento de barra de acción (ver captura de pantalla)? Quiero que el elemento de menú muestre un icono.

Cosas que he intentado:

  1. Establecer actionProvider (soporte lib v7) para el elemento de barra de acción. En el actionProvider, devuelve null para onCreateActionView. En onPrepareSubMenu, llene el submenú. Esto funciona en Android 2.x, pero no en Android 4.0, y para Android 2.x, no hay ningún icono.

  2. En el actionProvider, crear una vista de la imagen y al hacer clic, muestra un PopupMenu, pero el menú emergente no tiene icono, cuando he utilizado específicamente setIcon para mostrarlo.

No entiendo por qué PopupMenu no muestra ningún icono. He seguido el código "oficial" tan cerca como sea posible, pero en vano.

Http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.0.1_r1/android/widget/ShareActionProvider.java#195

¡Por favor ayuda! ¡Gracias!

Utilice popUpMenu – >>> Siga>

Res / menu / horario.xml

<menu xmlns:android="http://schemas.android.com/apk/res/android" > <item android:id="@+id/menu_MudaDia" android:titleCondensed="Mudar Dia" android:title="Mudar Dia" android:icon="@drawable/ic_menu_popup" android:showAsAction="always"> </item> 

Clase de actividad

 @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { menu.clear(); inflater.inflate(R.menu.horario, menu); super.onCreateOptionsMenu(menu, inflater); } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.menu_MudaDia: View vItem = getActivity().findViewById(R.id.menu_MudaDia); PopupMenu popMenu = new PopupMenu(getActivity(), vItem); for (int i = 0; i < diaSemana.length; i++) { popMenu.getMenu().add(0, i, i, diaSemana[i]); } popMenu.setOnMenuItemClickListener(new OnMenuItemClickListener() { @Override public boolean onMenuItemClick(MenuItem item) { DIA = diaSemana[item.getItemId()]; atualizaGUI(); return true; } }); popMenu.show(); break; default: break; } return super.onOptionsItemSelected(item); } 

Puede intentar crear un diseño con ImageView y TextView. Inflar ese diseño dentro de un PopUpWindow (consulte: http://developer.android.com/reference/android/widget/PopupWindow.html ).

Utilice el método showAsDropDown (View actionBarIcon) para mostrar el menú en el icono de su barra de acción.

Yo uso la biblioteca de soporte v7 y funciona bien.

– use ActionProvider

Utilizo ActionProvider personalizado y funciona bien en 2.x y 4.x, código en onPrepareSubMenu

 subMenu.clear(); // labels contain list item text. int len = labels.length; for(int i = 0; i < len; i++) { subMenu.add(0, labels[i], i, labels[i]) .setIcon(icons[i]) .setOnMenuItemClickListener(new MineMenuItemClickListener()); } super.onPrepareSubMenu(subMenu); 

– acerca de PopupMenu

PopupMenu no muestra el icono como predeterminado, pero puede hacer su propio PopupMenu y configurar la visualización de iconos.

Como este hombre hace CustomPopupMenu

La única modificación es añadir mPopup.setForceShowIcon(true);

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.