Utilice diferentes iconos con diferentes versiones de SDK de Android

Tengo iconos para mi menú de Android. En Android 3+ estoy usando un ActionBar negro para que los iconos sean blancos. Sin embargo, en Android 2.x el menú es inherentemente blanco, lo que significa que los iconos son casi invisibles. ¿Cómo puedo utilizar diferentes iconos de menú para diferentes versiones? Estoy asumiendo que puedo hacerlo utilizando diferentes directorios como res / drawable-mdpi-v11, pero me pregunto si hay otra manera, así que no tengo que crear un montón de diferentes directorios como añadir versiones o píxeles Densidades.

EDIT: Puse versiones oscuras en res / drawable-mdpi y res / drawable-hdpi para su uso con Android 2.x y pongo versiones ligeras en res / drawable-mdpi-v11 y res / drawable-hdpi-v11 para su uso con Android 3.x y superior, pero mi Android 2.1 (sdk 7) emulador sigue mostrando la versión ligera.

¿Alguna idea de por qué?

Puede seleccionar un tema basado en la versión de la plataforma, tal como se describe en la guía de desarrollo de Estilos y temas . Defina un estilo en su res / values ​​/ styles.xml como este:

<style name="ThemeSelector" parent="android:Theme.Light"> ... </style> 

Luego, en una carpeta res / values-v11 /, seleccione su tema (probablemente Holo, si está oscuro)

 <style name="ThemeSelector" parent="android:Theme.Holo"> ... </style> 

A continuación, agregue iconos a ese estilo. Por ejemplo, aquí hay un fragmento del archivo styles.xml de la aplicación de ejemplo HoneycombGallery .

 <style name="AppTheme.Dark" parent="@android:style/Theme.Holo"> ... <item name="menuIconCamera">@drawable/ic_menu_camera_holo_dark</item> <item name="menuIconToggle">@drawable/ic_menu_toggle_holo_dark</item> <item name="menuIconShare">@drawable/ic_menu_share_holo_dark</item> </style> 

Los elementos de la parte inferior 3 son todos los iconos de los directorios dibujables. Todavía necesitará al menos una carpeta por conjunto de iconos de resolución específica, pero puede combinar los iconos de luz y oscuridad en la misma carpeta, pero no tendrá que tener diferentes carpetas de iconos para cada versión de plataforma. Además, deberá listarlos como referencias en el archivo values ​​/ attrs.xml, de la siguiente manera:

 <resources> <declare-styleable name="AppTheme"> <attr name="listDragShadowBackground" format="reference" /> <attr name="menuIconCamera" format="reference" /> <attr name="menuIconToggle" format="reference" /> <attr name="menuIconShare" format="reference" /> </declare-styleable> </resources> 

En ese momento, podrá referirse a ellos dentro de su XML de diseño utilizando la desreferencia "? Attr / NameOfYourDrawable", de la siguiente manera:

 <item android:id="@+id/menu_camera" android:title="@string/camera" android:icon="?attr/menuIconCamera" android:showAsAction="ifRoom" /> 

Se encuentra en el sitio de desarrollo de Android: http://developer.android.com/guide/practices/ui_guidelines/icon_design_menu.html

Advertencia: Debido a que estos recursos pueden cambiar entre versiones de plataformas, no debe hacer referencia a estos iconos utilizando los ID de recursos de plataformas Android (es decir, iconos de menú bajo android.R.drawable). Si desea utilizar los iconos u otros recursos internos dibujables, debe almacenar una copia local de esos iconos o dibujables en los recursos de la aplicación y, a continuación, hacer referencia a la copia local del código de la aplicación. De esta manera, puede mantener el control sobre la apariencia de sus iconos, incluso si la copia del sistema cambia. Tenga en cuenta que la cuadrícula de abajo no pretende ser completa.

/ Res / drawable-hdpi (para Android 2.2 y siguientes)

/ Res / drawable-hdpi-v # (para Android 2.3 y versiones posteriores)

¿También ha probado probar esto en un teléfono 2.1+ y no en un emulador? Si no tiene un teléfono, intente crear otro AVD? Me temo que vas a necesitar las carpetas separadas.

Espero que esto ayude.

  • Actionlayout en menuitem no hace nada
  • Error: no se encontró identificador de recurso para el atributo "showAsAction" en el paquete android
  • Cómo recargar el menú de Android en la misma actividad?
  • Cambiar programaticamente el icono de ActionBar
  • Estilo de elemento de menú Arc como en la aplicación tumblr para Android
  • Cómo acceder a las vistas desde la acción en el menú
  • ShowAsAction = "always" se ignora en la barra de herramientas
  • Cómo implementar valores dinámicos en el elemento de menú en Android
  • Artículo de menú verificable de Android
  • Android alinea los elementos del menú a la izquierda en la barra de acción
  • Mostrar barra de progreso en MenuItem, incluso si está en modo de barra de acción dividida
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.