2012-01-18 7 views
16

Estoy siguiendo un libro sobre Desarrollo de Android para comenzar a escribir mi primera aplicación real. Llegué al punto en el que estoy creando un menú de opciones para una de mis actividades. El menú aparece, pero el icono correspondiente del elemento del menú se niega a mostrar. Este es el código para el menú:El ícono del menú de opciones de Android no se mostrará

ReminderListActivity

@Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     super.onCreateOptionsMenu(menu); 
     MenuInflater mi = getMenuInflater(); 
     mi.inflate(R.menu.list_menu, menu); 
     return true; 
    } 

res/menú/list_menu.xml

<?xml version="1.0" encoding="utf-8"?> 
<menu xmlns:android="http://schemas.android.com/apk/res/android" > 
    <item android:id="@+id/menu_insert" 
     android:icon="@drawable/menu_add" 
     android:title="@string/menu_insert" /> 

</menu> 

He copiado el icono ic_menu_add.png (32x32px) desde una de mis subcarpetas de Android SDK a mi carpeta res/drawable-mdpi y renombré el archivo a menu_add.png. Actualicé la carpeta dentro de Eclipse para que aparezca el ícono y, como puedes ver, lo configuré como el ícono para el elemento del menú en mi archivo de diseño. Intenté ejecutar mi proyecto en el emulador varias veces, pero el icono nunca aparece. Para el registro, estoy usando Android 4.0.3 ..

¿Alguna idea?

+0

¿Se puede tratar de poner el icono de la carpeta de la densidad de menos? Creo que no tiene nada que ver con tu código. Puede ser que sea un error en Eclipse. – iTurki

+0

¿Qué quiere decir exactamente por carpeta sin densidad? Solo hay carpetas ldpi, mdpi y hdpi drawables, ¿no? Intenté poner el ícono en todas las carpetas, pero eso no lo solucionó. – Jort

+1

agrega una carpeta y llámala 'dibujable' y luego pon el ícono en ella. Si no funcionó, intenta duplicar el ícono en cada carpeta. No olvide actualizar el proyecto y limpiarlo antes de realizar la prueba. – iTurki

Respuesta

28

En Android 3.0+, el enfoque preferido para el menú de opciones (un menú de derrame en la barra de acción) no mostrará iconos. Si tiene android:targetSdkVersion="11" o superior, los iconos nunca aparecerán en los menús de Android 3.0+. Los iconos aparecerán si promociona un elemento del menú de opciones para que sea un botón de la barra de herramientas, y los íconos aparecerán en los dispositivos Android 1.x/2.x.

+0

Gracias por la respuesta, sospechaba que tenía algo que ver con la configuración de Android. ¿Puedo simplemente convertir mis elementos del menú de opciones en botones de la barra de herramientas o necesito convertir mi menú de opciones completo en una barra de herramientas? – Jort

+0

@Jort: en primer lugar, debe dejar de preocuparse por los iconos. Le invitamos a usar 'android: showAsAction' para mover los elementos del menú de opciones a la barra de acciones como botones de la barra de herramientas. – CommonsWare

+0

Gracias por aclarar. El libro que estoy siguiendo cajero se enfoca en escribir aplicaciones para Android 2.2, por eso fui tan persistente en tratar de hacer aparecer mis íconos. Todavía no he usado la barra de acciones, pero ahora entiendo cómo cambió la interfaz de usuario en las versiones más nuevas de Android. Gracias de nuevo por el consejo útil :) – Jort

0

Una buena idea es que creó un diseño con RelativeLayout y cuando el usuario selecciona su menú, se muestra su diseño.

5

Esto es perfectamente trabajando para mí en el API 23

<menu xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:app="http://schemas.android.com/apk/res-auto" 
xmlns:tools="http://schemas.android.com/tools" 
tools:context=".MainActivity"> 
<item 
    android:icon="@drawable/ic_menu" 
    android:orderInCategory="100" 
    android:title="Option Menu" 
    app:showAsAction="always"> 
    <menu> 
     <item 
      android:id="@+id/action_myorder" 
      android:icon="@drawable/ic_order" 
      android:title="My Order" /> 
     <item 
      android:id="@+id/action_myaccount" 
      android:icon="@drawable/ic_account" 
      android:title="My Account" /> 
     <item 
      android:id="@+id/action_share" 
      android:icon="@drawable/ic_share" 
      android:title="Share" /> 
     <item 
      android:id="@+id/action_term_condition" 
      android:icon="@drawable/ic_terms" 
      android:title="Term and Conditions" /> 
     <item 
      android:id="@+id/action_logout" 
      android:icon="@drawable/ic_logout" 
      android:title="Logout" /> 
    </menu> 
</item> 

+0

genial! solo quiero saber para qué sirve android: orderInCategory = "100" – Abhijit

+0

si el valor para la categoría es 0, entonces el menú de desbordamiento aparece en el fragmento y luego 0 debajo del fragmento. –

Cuestiones relacionadas