¿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?
- Android View.onDraw () siempre tiene un lienzo limpio
- Cómo rotar EditText manualmente en Android
- Bibliotecas de código abierto de Android? ¿Vistas reutilizables, ViewGroups, adaptadores etc?
- IU de Tablet Android: fragmento de múltiples paneles o diseño lineal
- Cambiar el tamaño de los diferentes caracteres en la vista de texto, Android
- Obtener / recoger una imagen de la aplicación de Android integrada en la Galería mediante programación
- Android DialogFragment Redimensionamiento automático
- ¿UI de Android sin botones?
- ProgressBar mientras carga ListView (con AsyncTask)
- Posicionar dinámicamente la flecha de la esquina derecha del ActionBar Spinner en función de la longitud del título mostrado
- Cómo alinear LinearLayout en el centro de su matriz?
- Mostrar iconos en el menú de opciones al usar Theme.Holo
- Android - Botón con imagen giratoria / giratoria de "carga" cuando se pulsa
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.