item icon android android-layout actionbarsherlock android-ui

item - android menu icon



¿Cómo mostrar íconos en el menú de desbordamiento de ActionBar? (6)

Quiero mostrar el icono además del título del elemento del menú en el menú desplegable de desbordamiento.

Es posible?


Odio respuestas como esta, pero no soy lo suficientemente bueno para dar una mejor respuesta.

El icono para los elementos de desbordamiento para el menú es la línea del submenú2 "subMenu2Item.setIcon (R.drawable.ic_launcher);" simplemente reemplace ic_launcher con su archivo de icono (en el directorio de resolución de su programa). Espero que te refieras a utilizar 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 apoderarse del mundo y permitirnos montar sus colas, PERO ... Google es demasiado inconsistente para mostrarse gruñón por las incoherencias. 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 un ejemplo sobre cómo juntarlas. Un ejemplo completamente funcional que se puede ejecutar como un APK es todo lo que quiero. Puedo engañarlo desde allí. Si pueden tomarse 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 la misma discusión con Microsoft ese día y tampoco sucedió. Y así y así obtienes . :) Es una lástima que un tipo (el rock en Jake Wharton) trabaje por su cuenta para hacer un mejor trabajo con una barra de acción compatible con versiones anteriores de lo que Google puede inventar su ridículo Action Bar Patch.

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


ponga su menú con la propiedad android:showAsAction="always" y en el archivo xml del menú agregue submenús debajo de ese 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 íconos en los menús


De hecho, hay una manera fácil de lograrlo, ya que lo que ves es en realidad un TextView, así que estableces un lapso, 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 colocará un icono al comienzo del elemento del menú, justo antes de su texto original.


Quizás tengas el mismo problema que yo. Entonces, para mí, la solución fue fácil si está usando AppCompat simplemente no usa esta propiedad:

android:showAsAction="always"

en cambio, úsalo 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 una diferencia en las xmlns adicionales : la aplicación y showAsAction son propiedad de la aplicación .

Espero que ayude a alguien.


Esto no es posible por diseño (al menos en HC - y estoy desarrollando en API 16 y tampoco obtengo iconos). Google no quiere que hagamos eso.

Para un poco de discusión sobre el tema, vea la respuesta relacionada aquí:

  • Mostrar el icono para los elementos de menú de la barra de acciones en Honeycomb android 3.0

Como sugiere uno de los comentarios, si necesita los iconos, considere usar un menú desplegable, en lugar del menú de desbordamiento.


@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ú Desbordamiento en ActionBar