2012-03-06 13 views
12

Tengo iconos para mi menú de Android. En Android 3+ estoy usando una ActionBar negra 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 usar diferentes iconos de menú para diferentes versiones? Supongo que puedo hacerlo usando diferentes directorios dibujables como res/drawable-mdpi-v11, pero me pregunto si hay otra forma, así que no tengo que crear muchos directorios diferentes cuando agrego versiones o píxeles. densidadesUsa diferentes iconos con diferentes versiones de Android SDK

EDIT: pongo versiones oscuras en res/drawable-mdpi y res/drawable-hdpi para usar con Android 2.x y pongo versiones ligeras en res/drawable-mdpi-v11 y res/drawable-hdpi-v11 para usar con Android 3.xy superior, pero mi emulador de Android 2.1 (SDK 7) todavía muestra la versión ligera.

¿Alguna idea de por qué?

Respuesta

19

Puede seleccionar un tema basado en la versión de plataforma, como se describe en la guía de desarrollo Styles and Themes. Definir un estilo en su res/valores/styles.xml así:

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

Luego, en una res/valores-v11/carpeta, 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 3 elementos inferiores son todos iconos en los directorios dibujables. Necesitará al menos una carpeta por conjunto de iconos específico para la resolución, pero puede combinar los iconos oscuros claros & en la misma carpeta, pero no tendrá que tener diferentes carpetas de iconos para cada versión de plataforma. Además, tendrá que hacer una lista de ellos como referencia en el archivo de valores/attrs.xml, así:

<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> 

momento en el que podrás hacer referencia a ellos dentro de su diseño XML utilizando el "? Desreferencia attr/NameOfYourDrawable ", así:

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

contenida en el sitio dev androide: http://developer.android.com/guide/practices/ui_guidelines/icon_design_menu.html

Advertencia: Debido a que estos recursos pueden cambiar entre versiones de la plataforma, no se debe hacer referencia a estos iconos usando los ID de los recursos de la plataforma Android (es decir, los iconos de menú bajo android.R.drawable) . Si desea utilizar cualquier ícono u otros recursos internamente dibujables, debe almacenar una copia local de esos íconos o recursos dibujables en los recursos de su aplicación, luego haga referencia a la copia local desde el código de su aplicación. De esa 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 está destinada a ser completa.

/res/dibujable-IPAP (para Android 2.2 y por debajo)

/res/dibujable-IPAP-V # (para Android 2.3 y superior)

¿Usted también ha intentado probar esto en un 2,1 + teléfono y no un emulador? Si no tiene un teléfono, intente crear otro AVD? Me temo que necesitarás las carpetas separadas.

Espero que esto ayude.

+0

Esto era exactamente lo que necesitaba. Estaba peleando con conjuntos de iconos claros y oscuros en mi aplicación. Desde 2.3 y menos uso de un menú blanco y 3.0 y superior utilizan un menú oscuro para temas estándar, no podía simplemente usar un conjunto de iconos. ¡Gracias! – kenyu73

+1

Esta debería ser la respuesta. Funciona bien –

Cuestiones relacionadas