values studio for dimens dimen different crear archivo android android-layout

studio - resources dimen android



¿Cómo usar dimens.xml en Android? (5)

Cómo usar dimens.xml

  1. Cree un nuevo archivo dimens.xml haciendo clic derecho en la carpeta de values y seleccionando Nuevo> Archivo de recursos de valores . Escribe dimens para el nombre. (También podría llamarlo dimen o dimensions . El nombre realmente no importa, solo el tipo de recurso dimen que incluirá).

  2. 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 o sp .

  3. 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.

  1. 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 de dimen hará que sea mucho más fácil de ajustar más adelante. Esta es la misma idea que usar estilos y temas.

  2. 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últiples dimens.xml para usar con diferentes pantallas. De esa manera, podría hacer algo como configurar 8dp para el teléfono y 64dp para la tableta. Para crear otro archivo dimens.xml , haga clic con el botón derecho en su carpeta de res y elija Nuevo> Archivo de recursos de valor (consulte esta respuesta para obtener más información)

  3. Conversión conveniente de código de dp a px : 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 de dp constante, puede obtenerlo en píxeles de forma sencilla como esto para float :

    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 de dimens.xml hace que el código sea más difícil de leer porque debe dimens.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 valor dp 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" >

código completo, haga clic aquí para eso


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?