web-dev-qa-db-de.com

Wie definiere ich dimens.xml für jede Bildschirmgröße in Android?

Bei der Unterstützung unterschiedlicher Bildschirmgrößen (-dichten) in Android liegt der Fokus häufig darauf, unterschiedliche Layouts für jeden möglichen Bildschirm zu erstellen. I.E.

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

Ich habe ein Layout für einen xhdpi Bildschirm als Referenz entworfen und dessen Abmessungen in definiert. dimens.xml. Jetzt möchte ich jede mögliche Bildschirmgröße unterstützen. Wie kann ich das machen?

Soweit ich weiß, kann ich mit dem Tool this das richtige dimens.xml für andere Bildschirmgrößen und ermitteln füge es meinem Projekt hinzu. Ist dies in meiner Situation der richtige Weg?

Eine andere Frage, muss ich nur dimens.xml für die obigen Bildschirmabmessungen erstellen? Wenn ja, was ist dann w820dp?

Danke für Ihre Hilfe. Ich muss nur Telefone unterstützen (keine Tablets oder andere Geräte).

114
Amit Pal

Sie müssen einen Ordner Unterschiedliche Werte für unterschiedliche Bildschirme erstellen. Mögen

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

Weitere Informationen finden Sie hier

Ordner mit verschiedenen Werten in Android

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

Bearbeitet von @ humblerookie

Sie können Android Studio-Plugin mit dem Namen Dimenify verwenden, um automatisch Bemaßungswerte für andere Pixel-Buckets basierend auf benutzerdefinierten Skalierungsfaktoren zu generieren Alle Probleme/Vorschläge, die Sie dem Entwickler übermitteln.

242
IntelliJ Amiya

Verwenden Sie Scalable DP

Obwohl es theoretisch eine gute Idee ist, ein anderes Layout für verschiedene Bildschirmgrößen zu erstellen, kann es sehr schwierig werden, alle Bildschirmabmessungen und Pixeldichten zu berücksichtigen. Mehr als 20 verschiedene dimens.xml - Dateien, wie in den obigen Antworten vorgeschlagen, zu haben, ist überhaupt nicht einfach zu verwalten.

Verwendung:

So verwenden Sie sdp:

  1. Fügen Sie implementation 'com.intuit.sdp:sdp-Android:1.0.5' In Ihren build.gradle Ein.
  2. Ersetzen Sie jeden dp -Wert wie 50dp Durch einen @dimen/50_sdp Wie folgt:

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

Wie es funktioniert:

sdp skaliert mit der Bildschirmgröße, da es sich im Wesentlichen um eine große Liste unterschiedlicher dimens.xml für jeden möglichen dp Wert handelt.

enter image description here

In Aktion sehen:

Hier handelt es sich um drei Geräte mit sehr unterschiedlichen Bildschirmabmessungen und -dichten:

enter image description here

Beachten Sie, dass die sdp Größeneinheitsberechnung aufgrund einiger Leistungs- und Verwendbarkeitsbeschränkungen eine gewisse Annäherung enthält.

27
Advait S

wir möchten die Änderungen der erforderlichen Ansichtsgröße auf verschiedenen Bildschirmen anzeigen.

Wir müssen einen anderen Wertordner für verschiedene Bildschirme erstellen und die Datei dimens.xml basierend auf der Bildschirmdichte ablegen.

Ich habe ein TextView genommen und die Änderungen beobachtet, als ich dimens.xml in den verschiedenen Wertordnern änderte.

Bitte folgen Sie dem Prozess

normal - xhdpi\dimens.xml

Die folgenden Geräte können die Größe von Bildschirmen ändern, wenn wir die Datei normal - xhdpi\dimens.xml ändern

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

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

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

nexus 5 (5.0 ", 108 1920: xxhdpi)

nexus 4 (4,7 ", 768 * 1280: xhdpi)

Galaxy Nexus (4,7 ", 720 * 1280: xhdpi)

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

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

Xlarge - xhdpi\dimens.xml

Die folgenden Geräte können die Größe von Bildschirmen ändern, wenn wir die Datei Xlarge - xhdpi\dimens.xml ändern

nexus 9 (8,9 ", 2048 * 1556: xhdpi)

nexus 10 (10,1 ", 2560 * 1600: xhdpi)

large - xhdpi\dimens.xml

Die folgenden Geräte können die Größe von Bildschirmen ändern, wenn wir die Datei large - xhdpi\dimens.xml ändern

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

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

Die folgenden Bildschirme werden in "Suche nach allgemeinen Telefonen und Tablets" angezeigt.

large - mdpi\dimens.xml

Die folgenden Geräte können die Größe der Bildschirme ändern, wenn wir die Datei large - mdpi\dimens.xml ändern

5,1 "WVGA (480 * 800: mdpi)

5,4 "FWVGA (480 * 854: mdpi)

7,0 "WSVGA (Tablet) (1024 × 600: mdpi)

normal - hdpi\dimens.xml

Die folgenden Geräte können die Größe der Bildschirme ändern, wenn wir die Datei normal - hdpi\dimens.xml ändern

nexus s (4,0 ", 480 * 800: HDPI)

nexus One (3,7 ", 480 * 800: HDPI)

small - ldpi\dimens.xml

Die folgenden Geräte können die Größe der Bildschirme ändern, wenn wir die Datei small - ldpi\dimens.xml ändern

2,7 "QVGA Slider (240 * 320: ldpi)

2,7 "QVGA (240 * 320: ldpi)

xlarge - mdpi\dimens.xml

Die folgenden Geräte können die Größe von Bildschirmen ändern, wenn wir die Datei xlarge - mdpi\dimens.xml ändern

10,1 "WXGA (Tablet) (1280 * 800: MDPI)

normal - ldpi\dimens.xml

Die folgenden Geräte können die Größe der Bildschirme ändern, wenn wir die Datei normal - ldpi\dimens.xml ändern

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

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

normal - hdpi\dimens.xml

Die folgenden Geräte können die Größe der Bildschirme ändern, wenn wir die Datei normal - hdpi\dimens.xml ändern

4,0 "WVGA (480 * 800: HDPI)

3,7 "WVGA (480 * 800: hdpi)

3,7 "FWVGA Slider (480 * 854: hdpi)

normal - mdpi\dimens.xml

Die folgenden Geräte können die Größe der Bildschirme ändern, wenn wir die Datei "normal - mdpi\dimens.xml" ändern

3,2 "HVGA Slider (ADP1) (320 * 480: MDPI)

3,2 "QVGA (ADP2) (320 * 480: MDPI)

24
koteswarao

Ich habe ein einfaches Java) - Programm hochgeladen, das Ihren Projektspeicherort und die gewünschte Dimensionsdatei als Eingabe verwendet. Basierend darauf würde es die entsprechende Dimensionsdatei in der Konsole ausgeben. Hier ist der Link zu es:

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

Hier ist der vollständige Code für die Referenz:

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

Sie müssen einen anderen values Ordner für verschiedene Bildschirme erstellen und dimens.xml Datei nach Dichte.

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

Du kannst Geben dimens.xml im

1) Werte

2) Werte-hdpi

3) Werte-xhdpi

4) Werte-xxhdpi

Und gib verschiedene Größen in dimens.xml in entsprechenden Ordnern nach Dichte.

5
Anoop M

Es gibt nette Bibliotheken, die sich um alles kümmern und Ihre Schmerzen lindern. Fügen Sie dazu einfach zwei Abhängigkeiten in gradle hinzu:

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

Verwenden Sie danach dimens wie folgt:

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

Für den Fall, dass Sie mehr anzeigen möchten: Hier ist ein Link für eine Liste von Geräten (Tablet, Handy, Uhren), einschließlich watch, chromebook, windows und mac. Hier finden Sie die Dichte, Abmessungen usw. Wenn Sie auch einen Emulator verwenden, ist dies eine gute Ressource.

Wenn Sie auf ein bestimmtes Element klicken, werden auf der rechten Seite weitere Details angezeigt. sample

Da es sich um Android handelt, werde ich einen entsprechenden Beitrag veröffentlichen. sample1

sample2

~ Es ist besser, wenn Sie eine Kopie des Webs speichern. So zeigen Sie es offline an.

1
RoCk RoCk

Android 3.2 führt einen neuen Ansatz für Bildschirmgrößen ein. Die Zahlen, die die Bildschirmgröße beschreiben, sind alle in "dp" -Einheiten angegeben. Meistens können wir sie verwenden

kleinste Breite dp: die kleinste für das Anwendungslayout verfügbare Breite in "dp" -Einheiten; Dies ist die kleinste Breite dp, die Sie jemals bei einer Drehung des Displays feststellen werden.

Um einen Rechtsklick zu erstellen, klicken Sie auf res >>> new >>> Android-Ressourcenverzeichnis

Von Verfügbare Qualifikatoren Fenster verschieben Kleinste Bildschirmbreite nach Ausgewählte Qualifikatoren

In Bildschirmbreite Fenster schreiben Sie einfach den "dp" -Wert ab Sie möchten Android Studio, um diese Dimensionen zu verwenden.

Wechseln Sie in die Ansicht Projekt und klicken Sie mit der rechten Maustaste auf das neu erstellte Ressourcenverzeichnis

new >>> Values ​​resource file Geben Sie einen neuen Dateinamen ein dimens.xml und fertig.

0
Levon Petrosyan