2012-05-19 14 views
7

Entiendo esto correctamente:Si se proporciona un recurso dibujable para ldpi, mdpi, hdpi, xhdpi, este dibujable no necesita proporcionarse para nodpi?

Todos los dispositivos Android caen en uno de estos 4 cubos de densidad: ldpi, mdpi, hdpi, xhdpi.

Por lo tanto, si se proporciona un recurso dibujable para cada una de estas densidades (existe un dibujable o con el mismo nombre en cada una de estas carpetas), no es necesario proporcionar un dibujante con el mismo nombre en/res/dibujable o/res/dibujable-nodpi.

¿Lo entiendo correcto?

Entonces, ¿por qué tiene sentido proporcionar ese mismo recurso en/res/drawable para hacer que la aplicación sea más resistente al futuro, en caso de que se defina un nuevo cubo de densidad para el sistema operativo Android?

Respuesta

24

¿Entiendo mi error?

A través de este párrafo, es más o menos correcto. Vas un poco "fuera de los carriles" con su siguiente párrafo:

Por lo tanto, la única razón, por qué tiene sentido para proporcionar el mismo recurso en/res/dibujable sería, para hacer la aplicación más futuro- prueba, en caso de que se defina un nuevo cubo de densidad para el sistema operativo Android?

Realmente no.

Pone recursos en res/drawable/ que son intrínsecamente escalables (por ejemplo, ShapeDrawable). Pone los recursos en res/drawable-nodpi/ que, por algún motivo, no desea que se escale para que coincida con la densidad del dispositivo.

Si Android inventa una nueva cubeta de densidad (por ejemplo, -uhdpi para una densidad ultra alta de 400 ppp), Android probablemente haga lo que hace hoy si omite una cubeta de densidad: escale una de sus otras ediciones. Por ejemplo, si tiene -xhdpi y no tiene -hdpi, Android bajará la muestra de la imagen -xhdpi para utilizarla en un dispositivo -hdpi.

+0

Agradable Explicación sobre nodpi concept. –

0

Si su recurso se agrega para las cuatro densidades, entonces está en lo cierto de que no tiene para agregar el dibujable a la carpeta /res/drawable. Sin embargo, ha adivinado correctamente que es mejor tener algo en la carpeta predeterminada en el caso si aparece un nuevo calificador. Por lo tanto, recomiendo colocar recursos mdpi no en la carpeta /res/drawable-mdpi, sino en la carpeta predeterminada (/res/drawable/). Es una buena práctica para todo tipo de recursos.

En cuanto a la carpeta /res/drawable-nodpi, es una carpeta especial, porque se supone que contiene recursos que no se escalan automáticamente a diferencia de todos los demás calificadores. Por lo tanto, normalmente utiliza la carpeta /res/drawable-nodpi sola o no la usa en absoluto.

+0

Entonces, ¿por qué el voto a favor? ¿Qué es incorrecto en la respuesta? – Malcolm

5

Esto es correcto, siempre y cuando tenga empapables en los 4 cubos de densidad que tiene cubiertos. Una práctica común es hacer un dibujo personalizable en/res/dibujable que se refiere a la densidad que se extiende a los elementos dibujables.

Por ejemplo, es posible que desee un botón con diferentes estados para presionar y sin presionar. Primero, incluiría un dibujo de cada densidad para un botón presionado y sin presionar.A continuación, puede crear el siguiente button_black_selector.xml en/res/drawables:

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 

    <item android:state_pressed="false" 
     android:drawable="@drawable/button_black"/> 

    <item android:state_pressed="true" 
     android:drawable="@drawable/button_black_selected" /> 

</selector> 
+0

enfoque interesante y elegante, tx, David Z – mrd

Cuestiones relacionadas