web-dev-qa-db-fra.com

Comment définir dimens.xml pour chaque taille d'écran différente sous Android?

Lors de la prise en charge de différentes tailles (densités) d'écran dans Android , l'accent est souvent mis sur la création de dispositions différentes pour chaque écran possible. C'EST À DIRE.

  • ldpi
  • mdpi
  • hdpi
  • xhdpi
  • xxhdpi
  • xxxhdpi

J'ai conçu une mise en page pour un écran xhdpi , et défini ses dimensions dans dimens.xml. Maintenant je veux donner un support à chaque taille d'écran possible. Comment puis-je faire cela?

Pour autant que je sache, je peux utiliser l'outil this pour déterminer le bon dimens.xml pour d’autres tailles d’écran et l’ajouter à mon projet. Est-ce la bonne façon de le faire dans ma situation?

Une autre question, , dois-je seulement créer dimens.xml pour les dimensions d'écran supérieures? Si oui, alors qu'est-ce que w820dp?

Merci de votre aide. Je dois prendre en charge uniquement les téléphones (pas les tablettes ou autres appareils).

114
Amit Pal

Vous devez créer un dossier de valeurs différentes pour différents écrans . Comme

values-sw720dp          10.1” tablet 1280x800 mdpi

values-sw600dp          7.0”  tablet 1024x600 mdpi

values-sw480dp          5.4”  480x854 mdpi 
values-sw480dp          5.1”  480x800 mdpi 

values-xxhdpi           5.5"  1080x1920 xxhdpi
values-xxxhdpi           5.5" 1440x2560 xxxhdpi

values-xhdpi            4.7”   1280x720 xhdpi 
values-xhdpi            4.65”  720x1280 xhdpi 

values-hdpi             4.0” 480x800 hdpi
values-hdpi             3.7” 480x854 hdpi

values-mdpi             3.2” 320x480 mdpi

values-ldpi             3.4” 240x432 ldpi
values-ldpi             3.3” 240x400 ldpi
values-ldpi             2.7” 240x320 ldpi

enter image description here

Pour plus d'informations, vous pouvez visiter ici

Différents dossiers de valeurs sous Android

http://Android-developers.blogspot.in/2011/07/new-tools-for-managing-screen-sizes.html

Edité par @ humblerookie

Vous pouvez utiliser le plug-in Android Studio appelé Dimenify pour générer automatiquement des valeurs de cote pour d'autres compartiments de pixels en fonction de facteurs d'échelle personnalisés. Il est toujours en version bêta, assurez-vous de signaler tout problème/suggestion que vous rencontrez au développeur.

242
IntelliJ Amiya

Utiliser DP évolutif

Bien que théoriquement, il soit judicieux de disposer d'une disposition différente pour des tailles d'écran différentes, il peut s'avérer très difficile de prendre en compte toutes les dimensions et les densités de pixels (- === -). Avoir plus de 20 fichiers dimens.xml différents, comme suggéré dans les réponses ci-dessus, n'est pas facile à gérer du tout.

Comment utiliser:

Pour utiliser sdp:

  1. Inclure implementation 'com.intuit.sdp:sdp-Android:1.0.5' dans votre build.gradle,
  2. Remplacez toute valeur dp telle que 50dp par un @dimen/50_sdp comme ceci:

    <TextView
     Android:layout_width="@dimen/_50sdp"
     Android:layout_height="@dimen/_50sdp"
     Android:text="Hello World!" />
    

Comment ça marche:

sdp s'adapte à la taille de l'écran car il s'agit essentiellement d'une liste énorme de différents dimens.xml pour chaque valeur possible dp.

enter image description here

Voyez-le en action:

La voici sur trois appareils avec des dimensions d'écran et des densités très différentes:

enter image description here

Notez que le calcul de l'unité de taille sdp inclut une approximation due à des contraintes de performances et de convivialité.

27
Advait S

nous voulons voir les modifications de la taille d'affichage requise sur différents écrans.

Nous devons créer des dossiers de valeurs différentes pour différents écrans et placer le fichier dimens.xml en fonction de la densité de l'écran.

J'ai pris un TextView et observé les changements quand j'ai changé dimens.xml dans différents dossiers de valeurs.

S'il vous plaît suivez le processus

normal - xhdpi\dimens.xml

Les appareils ci-dessous peuvent changer la taille des écrans quand on change la normale - xhdpi\dimens.xml

nexus 5X (5.2 "* 1080 * 1920: 420 dpi)

lien 6P (5,7 "* 1440 * 2560: 560 dpi)

lien 6 (6.0 "* 1440 * 2560: 560 dpi)

lien 5 (5.0 ", 108 1920: xxhdpi)

lien 4 (4.7 ", 768 * 1280: xhdpi)

Nexus Galaxy (4.7 ", 720 * 1280: xhdpi)

4,65 "720p (720 * 1280: xhdpi)

WXGA 4,7 "(1280 * 720: Xhdpi)

Xlarge - xhdpi\dimens.xml

Les appareils ci-dessous peuvent modifier la taille des écrans lorsque nous modifions le fichier Xlarge - xhdpi\dimens.xml.

lien 9 (8.9 ", 2048 * 1556: xhdpi)

lien 10 (10.1 ", 2560 * 1600: xhdpi)

large - xhdpi\dimens.xml

Les appareils ci-dessous peuvent changer la taille des écrans quand on change le gros - xhdpi\dimens.xml

lien 7 (7.0 ", 1200 * 1920: xhdpi)

nexus 7 (2012) (7.0 ", 800 * 1280: tvdpi)

Les écrans ci-dessous sont visibles dans "Recherche de téléphones et de tablettes génériques".

large - mdpi\dimens.xml

Les appareils ci-dessous peuvent changer la taille des écrans quand on change le grand - mdpi\dimens.xml

WVGA 5.1 "(480 * 800: mdpi)

FWVGA 5.4 "(480 * 854: mdpi)

7.0 "WSVGA (Tablet) (1024 * 600: mdpi)

normal - hdpi\dimens.xml

Les appareils ci-dessous peuvent changer la taille des écrans quand on change la normale - hdpi\dimens.xml

nexus s (4.0 ", 480 * 800: hdpi)

nexus one (3.7 ", 480 * 800: hdpi)

petit - ldpi\dimens.xml

Les appareils ci-dessous peuvent changer la taille des écrans quand on change le petit - ldpi\dimens.xml

2.7 "QVGA Slider (240 * 320: ldpi)

2.7 "QVGA (240 * 320: ldpi)

xlarge - mdpi\dimens.xml

Les appareils ci-dessous peuvent changer la taille des écrans quand on change le xlarge - mdpi\dimens.xml

10.1 "WXGA (tABLET) (1280 * 800: MDPI)

normal - ldpi\dimens.xml

Les appareils ci-dessous peuvent changer la taille des écrans quand on change la normale - ldpi\dimens.xml

WQVGA 3,3 "(240 * 400: LDPI)

WQVGA 3,4 "(240 * 432: LDPI)

normal - hdpi\dimens.xml

Les appareils ci-dessous peuvent changer la taille des écrans quand on change la normale - hdpi\dimens.xml

4.0 "WVGA (480 * 800: hdpi)

3.7 "WVGA (480 * 800: hdpi)

3.7 "FWVGA Slider (480 * 854: hdpi)

normal - mdpi\dimens.xml

Les appareils ci-dessous peuvent changer la taille des écrans quand on change la normale - mdpi\dimens.xml

3.2 "HVGA Slider (ADP1) (320 * 480: MDPI)

3.2 "QVGA (ADP2) (320 * 480: MDPI)

24
koteswarao

J'ai téléchargé un simple programme Java qui prend l'emplacement de votre projet et le fichier de dimension souhaité. Sur cette base, il générerait le fichier de dimension correspondant dans la console. Voici le lien vers cela:

https://github.com/akeshwar/Dimens-for-different-screens-in-Android/blob/master/Main.Java

Voici le code complet pour la référence:

public class Main {


    /**
     * You can change your factors here. The current factors are in accordance with the official documentation.
     */
    private static final double LDPI_FACTOR = 0.375;
    private static final double MDPI_FACTOR = 0.5;
    private static final double HDPI_FACTOR = 0.75;
    private static final double XHDPI_FACTOR = 1.0;
    private static final double XXHDPI_FACTOR = 1.5;
    private static final double XXXHDPI_FACTOR = 2.0;

    private static double factor;

    public static void main(String[] args) throws IOException {


        Scanner in = new Scanner(System.in);
        System.out.println("Enter the location of the project/module");
        String projectPath = in.nextLine();

        System.out.println("Which of the following dimension file do you want?\n1. ldpi \n2. mdpi \n3. hdpi \n4. xhdpi \n5. xxhdpi \n6. xxxhdpi");

        int dimenType = in.nextInt();

        switch (dimenType) {
            case 1: factor = LDPI_FACTOR;
                break;
            case 2: factor = MDPI_FACTOR;
                break;
            case 3: factor = HDPI_FACTOR;
                break;
            case 4: factor = XHDPI_FACTOR;
                break;
            case 5: factor = XXHDPI_FACTOR;
                break;
            case 6: factor = XXXHDPI_FACTOR;
                break;
            default:
                factor = 1.0;
        }

        //full path = "/home/akeshwar/Android-sat-bothIncluded-notintegrated/code/tpr-5-5-9/princetonReview/src/main/res/values/dimens.xml"
        //location of the project or module = "/home/akeshwar/Android-sat-bothIncluded-notintegrated/code/tpr-5-5-9/princetonReview/"


        /**
         * In case there is some I/O exception with the file, you can directly copy-paste the full path to the file here:
         */
        String fullPath = projectPath + "/src/main/res/values/dimens.xml";

        FileInputStream fstream = new FileInputStream(fullPath);
        BufferedReader br = new BufferedReader(new InputStreamReader(fstream));

        String strLine;

        while ((strLine = br.readLine()) != null)   {
            modifyLine(strLine);
        }
        br.close();

    }

    private static void modifyLine(String line) {

        /**
         * Well, this is how I'm detecting if the line has some dimension value or not.
         */
        if(line.contains("p</")) {
            int endIndex = line.indexOf("p</");

            //since indexOf returns the first instance of the occurring string. And, the actual dimension would follow after the first ">" in the screen
            int begIndex = line.indexOf(">");

            String prefix = line.substring(0, begIndex+1);
            String root = line.substring(begIndex+1, endIndex-1);
            String suffix = line.substring(endIndex-1,line.length());


            /**
             * Now, we have the root. We can use it to create different dimensions. Root is simply the dimension number.
             */

            double dimens = Double.parseDouble(root);
            dimens = dimens*factor*1000;
            dimens = (double)((int)dimens);
            dimens = dimens/1000;
            root = dimens + "";

            System.out.println(prefix + " " +  root + " " + suffix );

        }

        System.out.println(line);
    }
}
6
Akeshwar Jha

Vous devez créer un dossier values différent pour différents écrans et mettre le fichier dimens.xml en fonction de la densité.

1) values

2) values-hdpi (320x480 ,480x800)

3) values-large-hdpi (600x1024)

4) values-xlarge (720x1280 ,768x1280 ,800x1280 ,Nexus7 ,Nexus10)

5) values-sw480dp (5.1' WVGA screen)

6) values-xhdpi (Nexus4 , Galaxy Nexus)
6
Piyush

Vous pouvez mettre dimens.xml dans

1) valeurs

2) valeurs-hdpi

3) values-xhdpi

4) valeurs-xxhdpi

Et donnez différentes tailles dans dimens.xml dans les dossiers correspondants en fonction de la densité.

5
Anoop M

Il existe de belles bibliothèques qui gèrent tout et réduisent votre douleur. Pour l'utiliser, ajoutez simplement deux dépendances dans gradle:

 implementation 'com.intuit.ssp:ssp-Android:1.0.5'
 implementation 'com.intuit.sdp:sdp-Android:1.0.5'

Après cela, utilisez dimens comme ceci:

        Android:layout_marginTop="@dimen/_80sdp"
4
Shivam Yadav

Si vous souhaitez en voir plus: voici un lien pour une liste de périphériques (tablettes, téléphones portables, montres), y compris watch, chromebook, windows et mac. Ici vous pouvez trouver la densité, les dimensions, etc. Il suffit de le baser ici, c'est une bonne ressource si vous utilisez également un émulateur.

Si vous cliquez sur un élément spécifique, il affichera plus de détails dans le côté droit. sample

Puisqu'il s'agit de Android, je posterai les articles qui s'y rapportent. sample1

sample2

~ C’est mieux si vous enregistrez une copie du Web. Pour le voir hors ligne.

1
RoCk RoCk

Android 3.2 introduit une nouvelle approche de la taille de l’écran, les chiffres décrivant la taille de l’écran sont tous exprimés en unités "dp".

plus petite largeur dp: la plus petite largeur disponible pour la présentation d'application en unités "dp"; c'est la plus petite largeur dp que vous rencontrerez dans n'importe quelle rotation de l'affichage.

Pour créer un clic droit sur res >>> nouvea >>> répertoire de ressources Android

De qualificatifs disponibles déplacement de la fenêtre plus petite largeur d'écran à qualificatifs choisis

Dans la fenêtre Largeur de l'écran, il suffit d'écrire la valeur "dp" à partir de laquelle vous souhaitez que Android Studio utilise cette valeur.

Puis passez à la vue Projet, cliquez avec le bouton droit sur votre nouveau répertoire de ressources créé.

nouvea >>> fichier de ressources Values entrez un nouveau nom de fichier dimens.xml et vous avez terminé.

0
Levon Petrosyan