¿Cómo mostrar iconos en el menú de desbordamiento de ActionBar?
Quiero mostrar el icono además del título del elemento de menú en el menú desplegable.
¿Es posible?
- BackgroundColorSpan con relleno adicional, vertical
- Cómo establecer el enfoque en un elemento en la barra de acción en el lanzamiento
- Android - Personalización del widget Spinner Look and Feel
- Cómo alinear LinearLayout en el centro de su matriz?
- El reajuste de MediaPlayer de Android congela la interfaz de usuario
- ¿Es posible que una actividad obtenga basura recopilada y no un fragmento de niño?
- Cómo mover el contenido principal con el lado izquierdo del diseño de cajones
- Android Dim Fondo de diálogo personalizado
- Estilo de elemento de menú Arc como en la aplicación tumblr para Android
- Los elementos de menú no se muestran en SherlockFragmentActivity con pestañas
- Creación de un botón de retroceso personalizado en android
- ¿Cómo evitar que un fragmento se agregue varias veces?
- Establecer vínculo en Java-Android
Poner su menú con la propiedad android:showAsAction="always"
y en el archivo xml del menú añadir submenús en virtud de que su menú como este
<item android:id="@+id/mainMenu" android:icon="@drawable/launcher" android:showAsAction="always"> <menu> <item android:id="@+id/menu_logout" android:icon="@drawable/log_out" android:title="logout"/> </menu> </item>
Esto mostrará los iconos en los menús
Realmente hay una manera fácil de lograrlo, ya que lo que ves es en realidad un TextView, por lo que se establece un intervalo, por ejemplo:
final MenuItem menuItem=... final ImageSpan imageSpan=new ImageSpan(this,R.drawable.ic_stat_app_icon); final CharSequence title=" "+menuItem.getTitle(); final SpannableString spannableString=new SpannableString(title); spannableString.setSpan(imageSpan,0,1,0); menuItem.setTitle(spannableString);
Esto pondrá un icono al principio del elemento de menú, justo antes de su texto original.
El odio responde así, pero no soy lo suficientemente bueno para dar una mejor respuesta.
El icono de los elementos de desbordamiento para el menú es la línea submenu2 "subMenu2Item.setIcon (R.drawable.ic_launcher)"; Simplemente reemplace ic_launcher con su archivo de iconos (en el directorio resizable de su programa). Espero que quieras usar ActionBarSherlock.
La línea subMenu1Item.setIcon (R.drawable.ic_launcher); Es para el icono de ActionBar para el botón de menú en la parte superior.
En respuesta a "Esto no es posible por diseño"
Muchas gracias a Google por intentar hacerse con el mundo y dejarnos montar su capa de colas, PERO … Google es demasiado inconsistente para ser gruñón sobre inconsistencias. Sería bueno que Google pudiera hacer un ejemplo para CADA "conjunto" de API que ofrecen. Hay referencias de API al código, pero no hay ejemplo sobre cómo juntarlas, Todo un ejemplo completamente funcional que se puede ejecutar como un APK es todo lo que quiero. Lo puedo engañar desde allí. Si pueden tomar el tiempo para escribir el APK ¿cuánto más difícil sería codificar un pequeño ejemplo en una plantilla estándar? Para el 30% de todo no es mucho pedir. Tuve este mismo argumento con Microsoft de nuevo en el día y tampoco sucedió entonces. Y así y así obtienes stackoverflow. 🙂 Es una lástima que se necesita un tipo (rock en Jake Wharton) trabajando por su cuenta para hacer un mejor trabajo con una barra de acción compatible con retroceso de Google puede llegar a su ridículo Acción Bar Patch thingy.
@Override public boolean onCreateOptionsMenu(com.actionbarsherlock.view.Menu menu) { SubMenu subMenu1 = menu.addSubMenu("Action Item"); subMenu1.add("Help"); subMenu1.add("About"); MenuItem subMenu1Item = subMenu1.getItem(); subMenu1Item.setIcon(R.drawable.ic_launcher); subMenu1Item.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS | MenuItem.SHOW_AS_ACTION_WITH_TEXT); SubMenu subMenu2 = menu.addSubMenu("All Options"); subMenu2.add("Help"); subMenu2.add("About"); MenuItem subMenu2Item = subMenu2.getItem(); subMenu2Item.setIcon(R.drawable.ic_launcher); return super.onCreateOptionsMenu(menu); }
@Override public boolean onMenuOpened(int featureId, Menu menu) { if(featureId == Window.FEATURE_ACTION_BAR && menu != null){ if(menu.getClass().getSimpleName().equals("MenuBuilder")){ try{ Method m = menu.getClass().getDeclaredMethod( "setOptionalIconsVisible", Boolean.TYPE); m.setAccessible(true); m.invoke(menu, true); } catch(NoSuchMethodException e){ Log.e(TAG, "onMenuOpened", e); } catch(Exception e){ throw new RuntimeException(e); } } } return super.onMenuOpened(featureId, menu); }
Referencia: Cómo mostrar iconos en el menú Overflow en ActionBar
Tal vez usted tiene el mismo problema que yo. Tan para mí la solución era fácil si usted está utilizando AppCompat apenas no utiliza esta característica:
android:showAsAction="always"
En lugar de usarlo así:
<?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto"> <item android:id="@+id/option" android:title="@string/option" android:icon="@drawable/option" app:showAsAction="always"> </item> </menu>
Hay diferencia en aditional xmlns: app y showAsAction es propiedad de app .
Espero que ayude a alguien.
Esto no es posible por diseño (al menos en HC – y estoy desarrollando en la API 16 y no conseguir ningún icono). Google no quiere que hagamos eso.
Para un poco de discusión sobre el tema, vea la respuesta relacionada aquí:
- Visualización de iconos para los elementos de menú de la barra de acción de Honeycomb android 3.0
Como uno de los comentarios sugiere, si necesita los iconos, considere el uso de un menú desplegable, en lugar del menú de desbordamiento.