respuesta Suplementario
listas @Devunwired 3 razones para usar dimens.xml
. Aquí están los detalles de cómo hacer eso.
1. Reutilización
Si establece alguna dp
o sp
valor en dimens.xml
vez como esto
<?xml version="1.0" encoding="utf-8"?>
<resources>
<dimen name="textview_padding">16dp</dimen>
<dimen name="large_text_size">30sp</dimen>
</resources>
se puede reutilizar a través de su aplicación en múltiples ubicaciones.
<TextView
android:padding="@dimen/textview_padding"
android:textSize="@dimen/large_text_size"
... />
<TextView
android:padding="@dimen/textview_padding"
android:textSize="@dimen/large_text_size"
... />
A continuación, cuando se necesita hacer un cambio, sólo es necesario hacerlo en un solo lugar.
Notas
- Este es básicamente el mismo efecto que el uso de un estilo o tema.
- Tenga cuidado de no dar dos vistas diferentes el mismo valor
dimen
si realmente no deberían ser.Si necesita realizar cambios en un conjunto de vistas pero no en otro, deberá volver a cada una de ellas individualmente, lo que frustra el objetivo.
2. Tamaño Diferencia
- @Devunwired llama esta diferencia Densidad, pero si está utilizando
dp
(píxeles independientes de densidad), esto ya se hace cargo son el problema diferencia de densidad para todos, pero los casos más pequeños. Entonces, en mi opinión, el tamaño de la pantalla es un factor más importante para usar dimens.xml
.
Un 8dp
de relleno puede parecer grande en un teléfono, pero cuando la aplicación se ejecuta en una tableta, parece demasiado estrecho. Puede resolver este problema haciendo dos (o más) versiones diferentes de dimens.xml
.
Haga clic con el botón derecho en su carpeta res
y elija Nuevo> Archivo de recursos de valor. Luego escriba dimens
y elija Ancho de pantalla más pequeño. Escriba en para el ancho (7 "tableta). (Hay otras formas de elegir los tamaños. Ver la documentation y this answer por más.)
Esto hará otra carpeta values
que será utilizada para los dispositivos cuyo ancho de la pantalla más pequeña es 600dp
. En la vista de Android, los dos archivos dimens.xml
se ven así.
Ahora se puede modificar de forma independiente.
valores/dimens.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<dimen name="my_default_padding">16dp</dimen>
</resources>
valores sw600dp/dimens.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<dimen name="my_default_padding">64dp</dimen>
</resources>
Al usar su dimen
es suficiente para establecer con el nombre que utilizó en ambos archivos dimens.xml
.
<LinearLayout
...
android:padding="@dimen/my_default_padding">
</LinearLayout>
El sistema seleccionará automáticamente el valor adecuado para usted en función del dispositivo que el usuario está utilizando.
3. Lectura desde el código
A veces es un dolor de escala mediante programación entre px
y dp
(ver this answer por cuánto).
Si usted tiene un valor fijo dp
ya definido en dimens.xml
como esto
<?xml version="1.0" encoding="utf-8"?>
<resources>
<dimen name="my_dp_value">16dp</dimen>
</resources>
Entonces usted puede conseguir fácilmente con
int sizeInPixels = getResources().getDimensionPixelSize(R.dimen.my_dp_value);
y ya se habrá convertido en píxeles por cualquier dispositivo de la densidad el usuario tiene.
Acerca de # 2, ¿cómo haces esa distinción en el archivo 'dimens.xml' (proporciona un ejemplo si es posible)? La razón 3 es muy convincente. –
@Nazgulled archivos múltiples en directorios calificados. Por ejemplo, poner un 'dimens.xml' en' res/values' para valores predeterminados y otro en 'res/values-ldpi' que incluye los pocos que quiero anular para dispositivos de baja densidad. – Devunwired
Pensé que solo estaba disponible para la carpeta de los drawables. Gracias por el consejo. –