Bagaimana cara menentukan dimens.xml untuk setiap ukuran layar berbeda di Android?

128

Ketika mendukung berbagai ukuran layar (kepadatan) di Android, seringkali fokusnya adalah pada menciptakan tata letak yang berbeda untuk setiap layar yang mungkin. YAITU

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

Saya merancang tata letak untuk layar xhdpi sebagai referensi, dan mendefinisikan dimensi di dimens.xml . Sekarang saya ingin memberikan dukungan untuk setiap ukuran layar yang memungkinkan. Bagaimana saya bisa melakukan itu?

Sejauh yang saya tahu, saya dapat menggunakan alat ini untuk mencari tahu dimens.xml yang tepat untuk ukuran layar lain dan menambahkannya ke proyek saya. Apakah ini cara yang tepat untuk melakukannya dalam situasi saya?

Pertanyaan lain, apakah saya hanya perlu membuat dimens.xml untuk dimensi layar di atas? Jika ya lalu apa w820dp?

Terima kasih atas bantuan Anda. Saya perlu mendukung ponsel saja (bukan tablet atau perangkat lain).

Amit Pal
sumber
1
Ya, Anda harus membuat dimesn.xmlfile yang berbeda untuk resolusi yang berbeda.
Piyush
@PiyushGupta Itu akan untuk semua layar dimensi di atas? Tetapi apakah W820dpitu sesuatu yang mendukung versi android yang berbeda? Dapatkah Anda menyarankan saya tutorial tentang mendukung layar berbeda berdasarkan dimens.xml?
Amit Pal
Ini untuk tablet atau untuk orang lain. Kalau tidak, seperti yang saya katakan, Anda harus membuat folder nilai yang berbeda.
Piyush

Jawaban:

266

Anda harus membuat folder Nilai berbeda untuk layar yang berbeda . Suka

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

masukkan deskripsi gambar di sini

Untuk informasi lebih lanjut, Anda dapat mengunjungi di sini

Folder nilai berbeda di android

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

Diedit oleh @humblerookie

Anda dapat menggunakan plugin Android Studio yang disebut Dimenify untuk secara otomatis menghasilkan nilai dimensi untuk bucket piksel lain berdasarkan faktor skala khusus. Masih dalam versi beta, pastikan untuk memberi tahu masalah / saran yang Anda temui kepada pengembang.

IntelliJ Amiya
sumber
1
bukankah seharusnya ada "values-sw480dp-hdpi" .xhdpi dan xxhdpi dan seterusnya? hanya 320dp yang memiliki jawaban seperti itu .. harap balas
Sharp Edge
2
@IntelliJAmiya: Anda harus menyebutkan perbedaan antara Android <= 3.2 dan> 3.2.
juergen d
5
@IntelliJAmiya Saya telah membuat plugin studio bernama Dimenify. Ini memungkinkan Anda membuat dimensi untuk bucket lain dengan mudah. Bisakah Anda menambahkan hasil edit dengan yang sama sehingga orang lain dapat menggunakannya? plugins.jetbrains.com/androidstudio/plugin/9349-dimenify
humblerookie
3
Dimenify ini adalah alat yang hebat
Muhammed Refaat
1
@IntelliJAmiya pasti, akan ada rilis baru yang tidak akan dibahas pada folder tersebut dan / atau mungkin tidak sesuai pada folder tertentu.
ralphgabb
35

Gunakan DP Scalable

Meskipun membuat tata letak yang berbeda untuk ukuran layar yang berbeda secara teori adalah ide yang baik, ini bisa menjadi sangat sulit untuk mengakomodasi semua dimensi layar, dan kepadatan piksel. Memiliki lebih dari 20 dimens.xmlfile berbeda seperti yang disarankan dalam jawaban di atas, tidak mudah untuk dikelola sama sekali.

Cara Penggunaan:

Untuk menggunakan sdp:

  1. Sertakan implementation 'com.intuit.sdp:sdp-android:1.0.5'dalam build.gradle,
  2. Ganti dpnilai apa pun seperti 50dpdengan @dimen/50_sdpseperti:

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

Bagaimana itu bekerja:

sdpskala dengan ukuran layar karena pada dasarnya daftar besar berbeda dimens.xmluntuk setiap dpnilai yang mungkin .

masukkan deskripsi gambar di sini

Lihat Dalam Tindakan:

Ini dia pada tiga perangkat dengan dimensi layar yang sangat berbeda, dan kepadatan:

masukkan deskripsi gambar di sini

Perhatikan bahwa sdpperhitungan unit ukuran mencakup beberapa perkiraan karena beberapa kendala kinerja dan kegunaan.

Advait S
sumber
Terima kasih banyak. Ini sangat berguna bagi saya.
twenk11k
@Advait dapatkah Anda memberi tahu saya folder nilai mana yang harus saya gunakan untuk Samsung Edge 7 dengan ponsel 5,5 inci dengan resolusi 2560x1440?
ULHAS PATIL
@Advait saat ini saya menggunakan folder values-xxhdpi tetapi masalahnya adalah, ia mengambil folder yang sama untuk layar 5, 5,5 & 6 folder yang sama sehingga ada gulir muncul di layar 5 inci & 5,5. Saya tidak menginginkan itu. bisakah Anda membantu saya dalam hal ini?
ULHAS PATIL
@Advait S nilai-xxhdpi untuk 5,5 "1080x1920 & Juga untuk 5,5" 1440x2560 Saya ingin folder berbeda untuk 5,5 "1440x2560.
ULHAS PATIL
@ULHASPATIL tepatnya! Saya bertemu dengan masalah yang sama dan tidak mengerti bagaimana mengatasinya. Apakah Anda menemukan solusi untuk layar dengan inci yang sama dan resolusi piksel yang berbeda?
Georgiy Chebotarev
27

kami ingin melihat perubahan ukuran tampilan yang diperlukan di layar yang berbeda.

Kita perlu membuat folder nilai yang berbeda untuk layar yang berbeda dan meletakkan file dimens.xml berdasarkan kepadatan layar.

Saya telah mengambil satu TextView dan mengamati perubahan ketika saya mengubah dimens.xml di folder nilai yang berbeda.

Silakan ikuti prosesnya

normal - xhdpi \ dimens.xml

Perangkat di bawah ini dapat mengubah ukuran layar ketika kami mengubah normal - xhdpi \ dimens.xml

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

nexus 6P (5.7 "* 1440 * 2560: 560dpi)

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

nexus 5 (5.0 ", 1080 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

Perangkat di bawah ini dapat mengubah ukuran layar ketika kami mengubah Xlarge - xhdpi \ dimens.xml

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

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

besar - xhdpi \ dimens.xml

Perangkat di bawah ini dapat mengubah ukuran layar ketika kami mengubah besar - xhdpi \ dimens.xml

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

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

Layar di bawah ini terlihat di "Search Generic Phones and Tablets"

besar - mdpi \ dimens.xml

Perangkat di bawah ini dapat mengubah ukuran layar saat kami mengubah - mdpi \ dimens.xml besar

5.1 "WVGA (480 * 800: mdpi)

5.4 "FWVGA (480 * 854: mdpi)

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

normal - hdpi \ dimens.xml

Perangkat di bawah ini dapat mengubah ukuran layar ketika kami mengubah normal - hdpi \ dimens.xml

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

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

kecil - ldpi \ dimens.xml

Perangkat di bawah ini dapat mengubah ukuran layar saat kami mengubah - ldpi \ dimens.xml kecil

2.7 "QVGA Slider (240 * 320: ldpi)

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

xlarge - mdpi \ dimens.xml

Perangkat di bawah ini dapat mengubah ukuran layar ketika kami mengubah xlarge - mdpi \ dimens.xml

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

normal - ldpi \ dimens.xml

Perangkat di bawah ini dapat mengubah ukuran layar saat kami mengubah normal - ldpi \ dimens.xml

3.3 "WQVGA (240 * 400: LDPI)

3.4 "WQVGA (240 * 432: LDPI)

normal - hdpi \ dimens.xml

Perangkat di bawah ini dapat mengubah ukuran layar ketika kami mengubah normal - hdpi \ dimens.xml

WVGA 4.0 "(480 * 800: hdpi)

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

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

normal - mdpi \ dimens.xml

Perangkat di bawah ini dapat mengubah ukuran layar ketika kami mengubah normal - mdpi \ dimens.xml

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

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

koteswarao
sumber
Jadi menurut Anda folder itu kemudian akan dinamai seperti apa values-normal-xhdpi?
VonSchnauzer
Ya, saya setuju dengan Anda, alih-alih menulis nilai - ke semua file, saya berkata, "buat folder nilai yang berbeda untuk ukuran teks yang berbeda". Jadi tolong baca judulnya. Terima kasih.
koteswarao
9

Ada perpustakaan bagus yang akan menangani semuanya dan mengurangi rasa sakit Anda. Untuk menggunakannya, cukup tambahkan dua dependensi secara bertahap:

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

Setelah itu, gunakan dimensseperti ini:

        android:layout_marginTop="@dimen/_80sdp"
Shivam Yadav
sumber
3
Berikut adalah perpustakaan untuk referensi: SDP dan SSP . Dan terima kasih atas jawaban yang tepat ini!
JorgeAmVF
7

Saya telah mengunggah program java sederhana yang mengambil lokasi proyek Anda dan file dimensi yang Anda inginkan sebagai input. Berdasarkan itu, itu akan menampilkan file dimensi yang sesuai di konsol. Berikut tautannya:

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

Berikut kode lengkap untuk referensi:

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);
    }
}
Akeshwar Jha
sumber
6

Anda harus membuat valuesfolder yang berbeda untuk layar yang berbeda dan meletakkan dimens.xmlfile sesuai dengan kepadatan.

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)
Piyush
sumber
Di mana saya bisa mendapatkan jatah di antara ukuran layar? Seperti yang saya lihat di alat mereka didefinisikan segala sesuatu dalam ldpi, mdpidengan cara
Amit Pal
Itu akan tergantung pada folder nilai Anda yang akan menjadi nilai retreive paling banyak darinya.
Piyush
Apakah saya perlu menyebutkan values-xxhdpiuntuk Nexus 6?
Amit Pal
Ya, Anda harus!
Piyush
320x480adalah mdpi khas . Jadi, letakkan di valuesatau divalues-mdpi
Phantômaxx
6

Anda bisa meletakkannya dimens.xml di

1) nilai

2) nilai-hdpi

3) nilai-xhdpi

4) nilai-xxhdpi

Dan memberikan ukuran yang berbeda di dimens.xmldalam folder yang sesuai sesuai dengan kepadatan.

Anoop M
sumber
2
Menurut dokumentasi Android lakukan kecil / normal / besar sudah usang.
Benjamin Mesing
1

Jika anda ingin melihat lebih banyak: Berikut adalah link yang untuk daftar perangkat (tablet, ponsel, jam tangan), termasuk watch, chromebook, windowsdanmac . Di sini Anda dapat menemukan kerapatan, dimensi, dan lain-lain. Hanya mendasarkannya di sini, ini adalah sumber yang bagus jika Anda menggunakan emulator juga.

Jika Anda mengklik item tertentu, itu akan menampilkan detail lebih banyak di sisi kanan. Sampel

Karena itu Android, saya akan memposting yang terkait dengannya. sampel1

sampel2

~ Lebih baik jika Anda menyimpan salinan web. Untuk melihatnya secara offline.

RoCk RoCk
sumber
1

Android 3.2 memperkenalkan pendekatan baru untuk ukuran layar, angka-angka yang menggambarkan ukuran layar semuanya dalam satuan "dp". Sebagian besar kita dapat menggunakan

dp lebar terkecil: lebar terkecil yang tersedia untuk tata letak aplikasi dalam unit “dp”; ini adalah dp lebar terkecil yang pernah Anda temui dalam rotasi layar apa pun.

Untuk membuat satu klik kanan pada res >>> baru >>> direktori sumber daya Android

Dari jendela Kualifikasi yang Tersedia, pindahkan Lebar Layar Terkecil ke Kualifikasi yang Dipilih

Di jendela Layar lebar cukup tulis nilai "dp" mulai dari Anda ingin Android Studio menggunakan dimens itu.

Daripada mengubah ke tampilan Proyek , klik kanan pada direktori sumber daya yang baru dibuat

baru >>> Nilai sumber daya file masukkan nama file baru dimens.xml dan Anda selesai.

Levon Petrosyan
sumber
Terima kasih telah menjelaskan cara membuat folder ini.
Beko