2012-07-22 14 views
31

Estoy haciendo un calendario y necesito una grilla. El problema es que los bordes, o más bien el espacio entre cada cuadrícula, que es lo que estoy usando para simular una cuadrícula, es 1 dp. Pero es bastante grueso. Estoy mirando otras aplicaciones de calendario que tienen los bordes, y son muy delgadas. Incluso si tuviera que usar una forma drawable y convertirla en 1dp, aún tiene ese grosor. Intenté usar .5, pero eso no pareció funcionar. ¿No es eso posible?¿Puede Android soportar dp's de menos de 1dp?

Respuesta

51

Android no le permiten introducir valores fraccionales para dp en XML, aunque no estoy seguro de que lo recomendaría porque los resultados se vuelven menos fácil de predecir/Calcular dispositivos convierten dp valores en píxeles usando (básicamente) la siguiente fórmula:.

px = (int)(scale * dp + 0.5) 

(es decir, la escala de densidad dispositivo redondeado al valor de píxel entero más cercano)

El valor scale estaría basada en la densidad de pantalla del dispositivo:

  • MDPI = 1
  • HDPI = 1,5
  • xhdpi = 2
  • XXHDPI = 3

Así 0.5dp daría como resultado {1px, 1px, 1px, 2px} para las densidades anteriores, mientras que 1dp sería {1px, 2px, 2px, 3px}. Un valor pequeño como 0.1dp se resolvería a {1px, 1px, 1px, 1px} porque cualquier cantidad inferior a 1 en la fórmula anterior se resuelve en un solo píxel a menos que el valor sea explícitamente 0dp (no es posible dibujar algo más delgado que un ancho de píxel simple)

Si desea asegurarse de que se utiliza el ancho más fino posible, probablemente sea mejor definir el ancho explícitamente con px en lugar de una unidad escalada como dp. Establecer un valor de 1px dibujará con un solo píxel en todos los dispositivos, y es mucho más legible que con la esperanza de que 0.5dp o 0.1dp haga lo mismo.

+0

El px es una gran idea: permite que cada dispositivo lo haga lo mejor posible. ¡Gracias! –

7

Sí.

puse a 0.1dp y es más pequeño que 1DP en mi Driod 4" ME860.

+0

Parece depender del dispositivo. Veo un borde de 0.5dp y se muestra en mi Nexus 4 pero no en un Kindle de primera generación. – Sam

Cuestiones relacionadas