web-dev-qa-db-fra.com

Comment utiliser dimens.xml sous Android?

Lorsque je conçois une présentation, je centralise toutes les dimensions dans dimens.xml en raison de sujets liés à la facilité de maintenance. Ma question est de savoir si cela est correct ou non. Quelle serait la meilleure bonne pratique? Il y a très peu d'informations à ce sujet, rien. Je sais que c’est une bonne idée de centraliser toutes les chaînes d’une mise en page sur strings.xml, colors sur colors.xml. Mais à propos des dimensions?

Par exemple:

<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" />
23
Jesús Castro

Comment utiliser dimens.xml

  1. Créez un nouveau fichier dimens.xml en cliquant avec le bouton droit de la souris sur le dossier values et en choisissant Nouveau> Fichier de ressources de valeurs. Écrivez dimens pour le nom. (Vous pouvez également l'appeler dimen ou dimensions. Le nom n'a pas d'importance, seul le type de ressource dimen qu'il inclura.)

  2. Ajoutez un nom et une valeur dimen.

    <?xml version="1.0" encoding="utf-8"?>
    <resources>
        <dimen name="my_value">16dp</dimen>
    </resources>
    

    Les valeurs peuvent être dans dp, px ou sp.

  3. Utilisez la valeur en xml

    <TextView
        Android:padding="@dimen/my_value"
        ... />
    

    ou en code

    float sizeInPixels = getResources().getDimension(R.dimen.my_value);
    

Quand utiliser dimens.xml

Merci à cette réponse pour plus d'idées.

  1. Réutilisation de valeurs - Si vous devez utiliser la même dimension à plusieurs endroits dans votre application (par exemple, le remplissage de la structure d'activité ou un TextView textSize), l'utilisation d'une seule valeur dimen facilitera considérablement les ajustements ultérieurs. C’est la même idée que d’utiliser des styles et des thèmes.

  2. Prise en charge de plusieurs écrans - Un remplissage de 8dp peut sembler correct sur un téléphone, mais très mauvais sur une tablette 10 ". Vous pouvez créer plusieurs dimens.xml à utiliser avec différents écrans. De cette manière, vous pouvez utiliser le paramètre 8dp pour le téléphone et 64dp pour la tablette. Pour créer un autre fichier dimens.xml, cliquez avec le bouton droit de la souris sur votre dossier res et choisissez Nouveau> Fichier de ressources de valeur. (voir cette réponse pour plus de détails)

  3. Convenient dp à px conversion de code - Dans le code, vous devez généralement utiliser des valeurs en pixels. Cependant, vous devez toujours penser à la densité des périphériques et la conversion est agaçante à faire par programme. Si vous avez une valeur constante dp, vous pouvez l'obtenir en pixels facilement comme ceci pour float:

    float sizeInPixels = getResources().getDimension(R.dimen.my_value);
    

    ou ceci pour int:

    int sizeInPixels = getResources().getDimensionPixelSize(R.dimen.my_value);
    

Je donne beaucoup plus de détails sur la façon de faire ces choses dans ma réponse plus complète .

Quand ne pas utiliser dimens.xml

  • Ne mettez pas vos valeurs dans dimens.xml si cela va les rendre plus difficiles à maintenir. Généralement, ce sera chaque fois que cela ne tombe pas dans les catégories que j'ai énumérées ci-dessus. L'utilisation de dimens.xml rend le code plus difficile à lire car vous devez basculer entre deux fichiers pour voir quelles sont les valeurs réelles. Ce n'est pas la peine (à mon avis) pour des vues individuelles.

  • Les cordes sont différentes. Toutes les chaînes doivent figurer dans un fichier de ressources tel que strings.xml, car presque toutes les chaînes doivent être traduites lors de l'internationalisation de votre application. En revanche, la plupart des valeurs de dimension n'ont pas besoin de changer pour une localité différente. Android Studio semble soutenir ce raisonnement. Définir une chaîne directement dans la mise en page xml donnera un avertissement, mais définir une valeur dp ne le fera pas.

42
Suragch

ajoutez un fichier xml dimens.xml à utiliser pour prendre en charge plusieurs périphériques. 

 <resources>
 <!-- Default screen margins, per the Android Design guidelines. -->
  <dimen name="iconarrow">1dp</dimen>
  <item name="text_view_padding" type="integer">100</item>
</resources>

alors vous pouvez l'utiliser dans votre code comme celui-ci en code Java

textview.setPadding(0, 0, 0, getResources().getInteger(R.integer.text_view_padding));

Vous pouvez également utiliser dans une autre mise en page (fichier XML).

Android:padding="@dimen/text_view_padding"
1
Gopal Singh

@ Jesús Castro Vous le faites bien. Il est préférable de conserver les valeurs dans le fichier dimens.xml plutôt que d'insérer des valeurs codées en dur dans tous vos fichiers de présentation.

Par exemple, imaginons le cas où vous augmentez les marges gauche et droite dans toutes vos vues. Si vous utilisiez une valeur unique conservée dans dimens.xml, cela constituerait un changement rapide - une valeur unique dans un seul fichier. Cependant, si vous aviez placé les valeurs de marge sous forme de valeurs littérales telles que "16dp" dans vos fichiers de mise en page est sujet aux erreurs et prend du temps.

0
Michael Peterson

vous n'avez pas besoin de mentionner la valeur dimen dans le fichier de dossier value. cette bibliothèque auto gère toutes les choses que vous appelez comme ça 

<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"
 >

code entier cliquez ici pour cela

0
Vinod Makode
But about dimensions?

Selon les documents officiels Android "Une dimension est une ressource simple qui est référencée à l'aide de la valeur fournie dans l'attribut name (et non du nom du fichier XML). Vous pouvez ainsi combiner des ressources de dimension avec d'autres ressources simples dans l'un fichier, sous un élément <resources> "

Pour plus de détails, consultez http://developer.Android.com/guide/topics/resources/more-resources.html

Dans cet article, Devunwired donne trois bonnes raisons pour lesquelles utiliser dimens.xml Quand le fichier dimens.xml doit-il être utilisé dans Android?

0
Fareya