studio - resources dimen android
¿Cómo usar dimens.xml en Android? (5)
Cómo usar dimens.xml
Cree un nuevo archivo
dimens.xml
haciendo clic derecho en la carpeta devalues
y seleccionando Nuevo> Archivo de recursos de valores . Escribedimens
para el nombre. (También podría llamarlodimen
odimensions
. El nombre realmente no importa, solo el tipo de recursodimen
que incluirá).Agregue un nombre y valor de
dimen
.<?xml version="1.0" encoding="utf-8"?> <resources> <dimen name="my_value">16dp</dimen> </resources>
Los valores pueden estar en
dp
,px
osp
.Usa el valor en xml
<TextView android:padding="@dimen/my_value" ... />
o en codigo
float sizeInPixels = getResources().getDimension(R.dimen.my_value);
Cuándo usar dimens.xml
Gracias a esta respuesta por más ideas.
Reutilización de valores : si necesita usar la misma dimensión en múltiples lugares a través de su aplicación (por ejemplo, el relleno del diseño de la actividad o un tamaño de
textSize
), el uso de un solo valor dedimen
hará que sea mucho más fácil de ajustar más adelante. Esta es la misma idea que usar estilos y temas.Compatibilidad con múltiples pantallas : un relleno de
8dp
puede verse bien en un teléfono pero terrible en una tableta de 10 ". Puede crear múltiplesdimens.xml
para usar con diferentes pantallas. De esa manera, podría hacer algo como configurar8dp
para el teléfono y64dp
para la tableta. Para crear otro archivodimens.xml
, haga clic con el botón derecho en su carpeta deres
y elija Nuevo> Archivo de recursos de valor (consulte esta respuesta para obtener más información)Conversión conveniente de código de
dp
apx
: en el código, generalmente necesita trabajar con valores de píxeles. Sin embargo, todavía tiene que pensar en la densidad del dispositivo y la conversion es molesta de hacer programáticamente. Si tiene un valor dedp
constante, puede obtenerlo en píxeles de forma sencilla como esto parafloat
:float sizeInPixels = getResources().getDimension(R.dimen.my_value);
o esto para
int
:int sizeInPixels = getResources().getDimensionPixelSize(R.dimen.my_value);
Doy muchos más detalles de cómo hacer estas cosas en mi respuesta más completa .
Cuando no usar dimens.xml
No ponga sus valores en
dimens.xml
si va a hacer que sean más difíciles de mantener. En general, eso ocurrirá siempre que no se encuentre en las categorías enumeradas anteriormente. El uso dedimens.xml
hace que el código sea más difícil de leer porque debedimens.xml
entre dos archivos para ver cuáles son los valores reales. No vale la pena (en mi opinión) para vistas individuales.Las cuerdas son diferentes. Todas las cadenas deben ir en un archivo de recursos como
strings.xml
porque casi todas las cadenas deben traducirse al internacionalizar su aplicación. La mayoría de los valores de dimensión, por otro lado, no necesitan cambiarse para una localidad diferente. Android Studio parece apoyar este razonamiento. La definición de una cadena directamente en el diseño xml dará una advertencia, pero la definición de un valordp
no lo hará.
Cuando diseño un diseño, centralizo todas las dimensiones en dimens.xml debido a los temas de mantenimiento. Mi pregunta es si esto es correcto o no. ¿Cuál sería la mejor buena práctica? Hay muy poca información sobre esto, nada. Sé que es una buena idea centralizar todas las cadenas de un diseño en strings.xml, colors en colors.xml. ¿Pero sobre dimensiones?
Por ejemplo:
<TableLayout
android:id="@+id/history_detail_rows_submitted"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/cebroker_history_detail_rows_border"
android:collapseColumns="*">
<TableRow
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/history_detail_rows_margin_vertical"
android:background="@color/cebroker_history_detail_rows_background"
android:gravity="center"
android:paddingBottom="@dimen/history_detail_rows_padding_vertical"
android:paddingLeft="@dimen/history_detail_rows_padding_horizontal"
android:paddingRight="@dimen/history_detail_rows_padding_horizontal"
android:paddingTop="@dimen/history_detail_rows_padding_vertical">
<TextView
android:layout_width="match_parent"
android:drawableLeft="@mipmap/ic_history_detail_submitted_by"
android:drawablePadding="@dimen/history_detail_rows_textviews_padding_drawable"
android:gravity="left|center"
android:paddingRight="@dimen/history_detail_rows_textviews_padding"
android:text="@string/history_detail_textview_submitted_by"
android:textColor="@color/cebroker_history_detail_rows_textviews"
android:textSize="@dimen/history_detail_rows_textviews_text_size" />
@ Jesús Castro Lo estás haciendo bien. Mantener los valores en el archivo dimens.xml es mejor que desperdiciar valores codificados en todos sus archivos de diseño.
Por ejemplo, imagine el caso en el que aumenta los márgenes izquierdo y derecho en toda su vista. Si usó un único valor mantenido en dimens.xml, esto sería un cambio rápido, un solo valor en un solo archivo. Sin embargo, si ha puesto los valores de margen como valores literales como "16dp" en sus archivos de diseño (en lugar de usar un valor dimensional como "@ dimen / leftright_margin"), debe editar cada archivo de diseño que sea propenso a errores. y simplemente toma mucho tiempo.
agregue un archivo xml dimens.xml, se usa para soportar múltiples dispositivos.
<resources>
<!-- Default screen margins, per the Android Design guidelines. -->
<dimen name="iconarrow">1dp</dimen>
<item name="text_view_padding" type="integer">100</item>
</resources>
entonces puedes usarlo en tu código como este en código java
textview.setPadding(0, 0, 0, getResources().getInteger(R.integer.text_view_padding));
También puede utilizar en otro diseño (archivo xml).
android:padding="@dimen/text_view_padding"
no es necesario mencionar el valor de atenuación en el archivo de carpeta de valores. esta biblioteca gestiona automáticamente todas las cosas que llamas así
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/_20sdp"
android:paddingLeft="@dimen/_20sdp"
android:paddingRight="@dimen/_20sdp"
android:paddingTop="@dimen/_20sdp"
android:background="@color/colorPrimary"
android:orientation="vertical"
>
But about dimensions?
De acuerdo con la documentación oficial de Android "Una dimensión es un recurso simple al que se hace referencia usando el valor proporcionado en el atributo de name
(no el nombre del archivo XML). Como tal, puede combinar recursos de dimensión con otros recursos simples en el XML. archivo, bajo un elemento <resources>
"
Para obtener más información, consulte http://developer.android.com/guide/topics/resources/more-resources.html
En esta publicación, Devunwired da tres grandes razones por las que usar dimens.xml ¿ Cuándo debería usarse el archivo dimens.xml en Android?