Android sp vs dp texts – qué ajustaría la ‘escala’ y cuál es la filosofía de soporte

Así que sabemos por muchos otros mensajes que debemos usar sp en lugar de dp para texto en Android, y sabemos que la razón para esto es respetar las ‘preferencias del usuario’.

Pero, precisamente, ¿cuáles son estas preferencias? ¿Cómo podría un usuario cambiar esta configuración?

No puedo encontrar ninguna referencia a través de la configuración en mi teléfono (esperaba algo en ‘Accesibilidad’ o ‘Pantalla’). Entonces, ¿qué es una configuración de usuario? ¿Se hace solo a través de una aplicación como ‘Big Font’?

Suponiendo que sea (establecido por algo así como fuente grande), he jugado con Google Docs y algunas otras aplicaciones de Google con la fuente establecida en 130%. Si bien la mayoría del diseño se mantiene bien, algunos se recortan un poco y no se pueden leer (y eso está en un SGS2 grande filtrado). Entonces, ¿cuál es el enfoque para desarrollar aplicaciones con tamaños de texto usando ‘sp’? ¿Nos aseguramos de que funcione al 100% de escala y luego ignoremos otras configuraciones? Llámenlo un caso especial del que el usuario puede preocuparse, o hagamos todo lo posible para asegurarnos de que las cosas se expandan o se puedan desplazar, en caso de que el texto se desborde. ?

Un argumento es que deberíamos usar ‘dp’ para garantizar que un usuario tenga la oportunidad de ver el texto (incluso si tienen que usar una lupa)

¿Pensamientos / comentarios?

Está expuesto en el menú de configuración en algunos dispositivos Android (depende del fabricante). También puede verse alterado por algunas opciones de accesibilidad (dependientes del dispositivo).

En general, siempre debe usar píxeles independientes de la escala, especialmente para una gran cantidad de texto.

Sin embargo, si su texto debe caber en un cuadro delimitador de tamaño conocido, debe usar píxeles independientes de la densidad para asegurarse de que el texto siempre se ajuste correctamente y de que todos los caracteres estén visibles independientemente de la configuración de los usuarios.

En pocas palabras: ¿boost el tamaño del texto en alrededor de 5sp daría como resultado que el texto sea ilegible o destruya su UI? De ser así, use píxeles independientes de la densidad. De lo contrario, use píxeles independientes de la escala. Sin embargo, en general debería intentar usar píxeles independientes de la escala siempre que sea posible, lo que significa diseñar una interfaz de usuario que pueda acomodar diferentes tamaños de texto.

El uso de la unidad sp se recomienda para el texto porque en ICS y arriba (también podría ser Honeycomb, corrígeme si estoy equivocado), hay una preferencia por el tamaño de fuente del usuario. Por lo tanto, si usa Gingerbread o menos, no podrá encontrar esta configuración.

La preferencia se encuentra en Configuración, Pantalla, Tamaño de fuente. También hay una opción en Configuración, Accesibilidad, Texto grande, también.

Para abordar su pregunta sobre cómo utilizar sp , tenga en cuenta que, de forma predeterminada, sin cambiar ninguna de las preferencias de tamaño de fuente, 1sp es equivalente a 1dp (también, son equivalentes antes de que se introdujera la preferencia). Como ha notado, diseñar para el caso en que un usuario tenga texto enorme probablemente requiera que suponga que las cosas van a tener que desplazarse donde, de otro modo, no podría esperar.

La respuesta está en mirar este problema en particular de manera integral.

La motivación para usar “sp” para los tamaños de fuente radica en darle al desarrollador poder para controlar su diseño ante el cambio de tamaño de fuente en su dispositivo.

Ejemplo:

Veamos 2 casos extremos:

1) El usuario selecciona el tamaño de letra “pequeño”

Así es como se ve mi diseño:

http://postimg.org/image/kiyqeo2bh/

Aquí está el diseño xml:

    

2) Si el usuario selecciona tamaño de letra “enorme”:

Este es mi aspecto:

http://postimg.org/image/d7rax9wob/

Mi diseño xml es el mismo que el anterior en el caso 1).

Entonces, como puede ver lo que sucedió aquí, la parte superior de TextView tiene una fuente tipográfica perfecta en sp porque no se ajusta a la totalidad del rango de tamaños de fuente (de pequeño a grande). Pero la parte inferior de TextView completamente desordena su diseño / diseño en el caso 2).

Entonces, usted, como desarrollador, puede repetir y decidir qué tamaño de sp trabaja para su diseño y Android lo dibujará por usted.

 px Pixels - corresponds to actual pixels on the screen. in Inches - based on the physical size of the screen. 1 Inch = 2.54 centimeters mm Millimeters - based on the physical size of the screen. pt Points - 1/72 of an inch based on the physical size of the screen. dp or dip Density-independent Pixels - an abstract unit that is based on the physical density of the screen. These units are relative to a 160 dpi screen, so one dp is one pixel on a 160 dpi screen. The ratio of dp-to-pixel will change with the screen density, but not necessarily in direct proportion. Note: The compiler accepts both "dip" and "dp", though "dp" is more consistent with "sp". sp Scale-independent Pixels - this is like the dp unit, but it is also scaled by the user's font size preference. It is recommended you use this unit when specifying font sizes, so they will be adjusted for both the screen density and user's preference. From Understanding Density Independence In Android: +----------------+----------------+---------------+-------------------------------+ | Density Bucket | Screen Density | Physical Size | Pixel Size | +----------------+----------------+---------------+-------------------------------+ | ldpi | 120 dpi | 0.5 x 0.5 in | 0.5 in * 120 dpi = 60x60 px | +----------------+----------------+---------------+-------------------------------+ | mdpi | 160 dpi | 0.5 x 0.5 in | 0.5 in * 160 dpi = 80x80 px | +----------------+----------------+---------------+-------------------------------+ | hdpi | 240 dpi | 0.5 x 0.5 in | 0.5 in * 240 dpi = 120x120 px | +----------------+----------------+---------------+-------------------------------+ | xhdpi | 320 dpi | 0.5 x 0.5 in | 0.5 in * 320 dpi = 160x160 px | +----------------+----------------+---------------+-------------------------------+ | xxhdpi | 480 dpi | 0.5 x 0.5 in | 0.5 in * 480 dpi = 240x240 px | +----------------+----------------+---------------+-------------------------------+ | xxxhdpi | 640 dpi | 0.5 x 0.5 in | 0.5 in * 640 dpi = 320x320 px | +----------------+----------------+---------------+-------------------------------+ +---------+-------------+---------------+-------------+--------------------+ | Unit | Description | Units Per | Density | Same Physical Size | | | | Physical Inch | Independent | On Every Screen | +---------+-------------+---------------+-------------+--------------------+ | px | Pixels | Varies | No | No | +---------+-------------+---------------+-------------+--------------------+ | in | Inches | 1 | Yes | Yes | +---------+-------------+---------------+-------------+--------------------+ | mm | Millimeters | 25.4 | Yes | Yes | +---------+-------------+---------------+-------------+--------------------+ | pt | Points | 72 | Yes | Yes | +---------+-------------+---------------+-------------+--------------------+ | dp | Density | ~160 | Yes | No | | | Independent | | | | | | Pixels | | | | +---------+-------------+---------------+-------------+--------------------+ | sp | Scale | ~160 | Yes | No | | | Independent | | | | | | Pixels | | | | +---------+-------------+---------------+-------------+--------------------+ More info can be also be found in the Google Design Documentation.