Android'de her farklı ekran boyutu için dimens.xml nasıl tanımlanır?


128

Android'de farklı ekran boyutlarını (yoğunlukları) desteklerken genellikle odak, olası her ekran için farklı düzenler oluşturmaktır. IE

  • LDPI
  • mdpi
  • hdpi
  • xhdpi
  • xxhdpi
  • xxxhdpi

Bir için bir düzen olarak tasarlanmış xhdpi referans olarak ekranı ve 's tanımlanan boyutlar içinde dimens.xml . Şimdi mümkün olan her ekran boyutuna destek vermek istiyorum. Bunu nasıl yapabilirim?

Bildiğim kadarıyla, bu aracı diğer ekran boyutları için uygun dimens.xml'yi bulmak ve projeme eklemek için kullanabilirim. Benim durumumda bunu yapmanın doğru yolu bu mu?

Başka bir soru, yukarıdaki ekran boyutları için yalnızca dimens.xml oluşturmam gerekiyor mu? Eğer evet ise o zaman nedir w820dp?

Yardımınız için teşekkürler. Yalnızca telefonları desteklemem gerekiyor (tabletleri veya diğer cihazları değil).


1
Evet dimesn.xml, farklı çözünürlükler için farklı dosyalar oluşturmanız gerekir .
Piyush

@PiyushGupta Bu, tüm boyutsal ekran için olacak mı? Ama W820dpfarklı android sürümünü destekleyen bir şey nedir? Ayrıca dimens.xml temelinde farklı ekranı destekleme konusunda bana herhangi bir eğitim önerebilir misiniz?
Amit Pal

Tablet veya diğerleri için. Aksi takdirde dediğim gibi farklı bir değerler klasörü oluşturmanız gerekir.
Piyush

Yanıtlar:


266

Farklı ekranlar için Farklı değerler klasörü oluşturmalısınız . Sevmek

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

görüntü açıklamasını buraya girin

Daha fazla bilgi için burayı ziyaret edebilirsiniz

Android'de farklı değerler klasörleri

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

Düzenlenen tarafından @humblerookie

Özel ölçek faktörlerine göre diğer piksel kümeleri için boyut değerlerini otomatik olarak oluşturmak üzere Dimenify adlı Android Studio eklentisini kullanabilirsiniz . Hala beta sürümünde, karşılaştığınız sorunları / önerileri geliştiriciye bildirdiğinizden emin olun.


1
"values-sw480dp-hdpi" .xhdpi ve xxhdpi vb. olmamalı mı? cevabınızda sadece 320dp var .. lütfen cevap verin
Sharp Edge

2
@IntelliJAmiya: Android <= 3.2 ve> 3.2 arasındaki farktan bahsetmelisiniz.
juergen d

5
@IntelliJAmiya Dimenify adında bir stüdyo eklentisi oluşturdum. Bu, diğer kovalar için kolayca boyutlar oluşturmanıza olanak tanır. Başkalarının da kullanabilmesi için aynı şekilde bir düzenleme ekleyebilir misiniz? plugins.jetbrains.com/androidstudio/plugin/9349-dimenify
humblerookie

3
Bu Dimenify harika bir araç
Muhammed Refaat

1
@IntelliJAmiya elbette, bu klasörlerde ele alınmayacak ve / veya belirli klasörlerde uygun olmayabilecek yeni sürümler olacak.
ralphgabb

36

Ölçeklenebilir DP kullanın

Farklı ekran boyutları için farklı bir düzen yapmak teorik olarak iyi bir fikir olsa da, tüm ekran boyutları ve piksel yoğunluklarına uyum sağlamak çok zor olabilir . dimens.xmlYukarıdaki cevaplarda önerildiği gibi 20'den fazla farklı dosyaya sahip olmak hiç de kolay değildir.

Nasıl kullanılır:

Kullanmak için sdp:

  1. Dahil implementation 'com.intuit.sdp:sdp-android:1.0.5'et build.gradle,
  2. Herhangi değiştirin dpgibi değer 50dpbir ile @dimen/50_sdpşöyle:

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

Nasıl çalışır:

sdpekran boyutuna göre ölçeklenir çünkü esasen dimens.xmlolası her dpdeğer için büyük bir farklı listedir .

görüntü açıklamasını buraya girin

Uygulamaya Bakın:

Burada, birbirinden çok farklı ekran boyutları ve yoğunlukları olan üç cihazda:

görüntü açıklamasını buraya girin

sdpBoyut birimi hesaplamasının bazı performans ve kullanılabilirlik kısıtlamaları nedeniyle bazı tahminler içerdiğini unutmayın .


1
Çok minnettarım. Bu benim için gerçekten faydalı oldu.
twenk11k

@Advait, 2560x1440 çözünürlüklü 5.5 inç mobil Samsung Edge 7 için hangi değerler klasörünü kullanmam gerektiğini söyleyebilir misiniz?
ULHAS PATIL

@Advait şu anda values-xxhdpi klasörünü kullanıyorum, ancak sorun şu ki, 5, 5.5 ve 6 ekranlar için aynı klasörü alıyor, bu yüzden 5 inç ekranlarda ve 5.5'te kaydırma görünüyor. Bunu istemiyorum lütfen bana bu konuda yardım eder misin?
ULHAS PATIL

@Advait S values-xxhdpi 5.5 "1080x1920 için & Ayrıca 5.5" 1440x2560 için 5.5 "1440x2560 için farklı bir klasör istiyorum.
ULHAS PATIL

@ULHASPATIL tam olarak! Benzer bir sorunla karşılaştım ve nasıl çözeceğimi anlamadım. Benzer inç ve farklı piksel çözünürlüğüne sahip ekranlar için herhangi bir çözüm buldunuz mu?
Georgiy Chebotarev

27

gerekli görünüm boyutundaki değişiklikleri farklı ekranlarda görmek istiyoruz.

Farklı ekranlar için farklı değerler klasörleri oluşturmamız ve ekran yoğunluklarına göre dimens.xml dosyası koymamız gerekiyor.

Bir TextView aldım ve farklı değerler klasörlerinde dimens.xml değiştirdiğimde meydana gelen değişiklikleri gözlemledim.

Lütfen süreci takip edin

normal - xhdpi \ dimens.xml

Normal - xhdpi \ dimens.xml'yi değiştirdiğimizde aşağıdaki cihazlar ekranların boyutlarını değiştirebilir.

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

Xlarge - xhdpi \ dimens.xml değiştirdiğimizde aşağıdaki cihazlar ekranların boyutlarını değiştirebilir.

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

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

büyük - xhdpi \ dimens.xml

Aşağıdaki cihazlar, büyük - xhdpi \ dimens.xml'yi değiştirdiğimizde ekranların boyutlarını değiştirebilir.

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

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

Aşağıdaki ekranlar "Genel Telefonları ve Tabletleri Ara" bölümünde görülebilir.

büyük - mdpi \ dimens.xml

Aşağıdaki cihazlar, büyük - mdpi \ dimens.xml'yi değiştirdiğimizde ekranların boyutlarını değiştirebilir.

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

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

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

normal - hdpi \ dimens.xml

Normal - hdpi \ dimens.xml'yi değiştirdiğimizde aşağıdaki cihazlar ekranların boyutlarını değiştirebilir.

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

nexus one (3,7 ", 480 * 800: hdpi)

küçük - ldpi \ dimens.xml

Küçük - ldpi \ dimens.xml değiştirdiğimizde aşağıdaki cihazlar ekranların boyutlarını değiştirebilir.

2,7 "QVGA Kaydırıcı (240 * 320: ldpi)

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

xlarge - mdpi \ dimens.xml

Aşağıdaki cihazlar, xlarge - mdpi \ dimens.xml'yi değiştirdiğimizde ekranların boyutlarını değiştirebilir.

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

normal - ldpi \ dimens.xml

Normal - ldpi \ dimens.xml değiştirdiğimizde aşağıdaki cihazlar ekranların boyutlarını değiştirebilir.

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

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

normal - hdpi \ dimens.xml

Normal - hdpi \ dimens.xml'yi değiştirdiğimizde aşağıdaki cihazlar ekranların boyutlarını değiştirebilir.

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

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

3,7 "FWVGA Kaydırıcı (480 * 854: hdpi)

normal - mdpi \ dimens.xml

Normal - mdpi \ dimens.xml'yi değiştirdiğimizde aşağıdaki cihazlar ekranların boyutlarını değiştirebilir.

3,2 "HVGA Kaydırıcı (ADP1) (320 * 480: MDPI)

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


Öyleyse size göre klasörler şöyle adlandırılır values-normal-xhdpimı?
VonSchnauzer

Evet, tüm dosyalara değer yazmak yerine size katılıyorum, "farklı metin boyutları için farklı değerler klasörleri oluşturun" dedim. Lütfen başlığı okuyun. Teşekkürler.
koteswarao

9

Her şeyi halledecek ve acınızı azaltacak güzel kütüphaneler var. Kullanmak için gradle'a iki bağımlılık eklemeniz yeterlidir:

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

Bundan sonra şu şekilde kullanın dimens:

        android:layout_marginTop="@dimen/_80sdp"

3
İşte referans için kitaplıklar: SDP ve SSP . Ve bu kesin cevap için teşekkürler!
JorgeAmVF

7

Proje konumunuzu ve istediğiniz boyut dosyasını girdi olarak alan basit bir java programı yükledim. Buna dayanarak, ilgili boyut dosyasını konsola çıkarır. İşte bunun bağlantısı:

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

İşte referans için tam kod:

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

valuesFarklı ekranlar için farklı bir klasör oluşturmalı ve dimens.xmlyoğunluklarına göre dosya koymalısınız .

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)

Ekran boyutları arasındaki oranı nereden alabilirim? Ben aracında görebileceğiniz gibi onlar her şeyi tanımlanan ldpi, mdpibir şekilde
Amit Pal

Bu, ondan en çok değerleri alacak olan değerler klasörünüze bağlı olacaktır.
Piyush

values-xxhdpiNexus 6 için bahsetmem gerekir mi?
Amit Pal

Evet olmalısın!
Piyush

320x480tipik mdpi'dir . Öyleyse, içine valuesveya içine koyunvalues-mdpi
Phantômaxx

6

Sen koyabilirsiniz dimens.xmliçinde

1) değerler

2) değerler-hdpi

3) değerler-xhdpi

4) değerler-xxhdpi

Ve dimens.xmlyoğunluklara göre ilgili klasörlerde farklı boyutlar verin .


2
Android belgelerine göre küçük / normal / büyük kullanımdan kaldırılmıştır.
Benjamin Mesing

1

Eğer fazla görüntüle istiyorum: İşte bu bağlantı da dahil cihazlar (tablet, mobil, saatler), listesi için watch, chromebook, windowsve mac. Burada yoğunluğu, boyutları vb. Bulabilirsiniz. Sadece buraya dayanarak, bir öykünücü kullanıyorsanız, bu iyi bir kaynaktır.

Belirli bir öğeyi tıklarsanız, sağ tarafta daha fazla ayrıntı gösterecektir. örneklem

Olduğu Androidiçin bununla ilgili yayınlayacağım. sample1

sample2

~ Web'in bir kopyasını kaydetmeniz daha iyi olur. Çevrimdışı görüntülemek için.


1

Android 3.2, ekran boyutlarına yeni bir yaklaşım getiriyor, ekran boyutunu tanımlayan sayıların tümü "dp" birimlerindedir. Çoğunlukla kullanabiliriz

en küçük genişlik dp: "dp" birimlerinde uygulama düzeni için mevcut en küçük genişlik; bu, ekranın herhangi bir dönüşünde karşılaşabileceğiniz en küçük dp genişliğidir.

Res >>> yeni >>> Android kaynak dizinine tek bir sağ tıklayın

Gönderen Mevcut elemeleri pencere hareket En Küçük Ekran Genişliği için Seçilmiş elemeleri

Gelen Ekran genişliği penceresinde sadece DIMENS kullanılacak Android Studio istiyorum senden başlayarak "dp" değerini yazın.

Proje görünümüne geçmek yerine, yeni oluşturulan kaynak dizininize sağ tıklayın

yeni >>> Değerler kaynak dosyası yeni bir dosya adı dimens.xml girin ve bitirdiniz.


Bu klasörlerin nasıl oluşturulacağını açıkladığınız için teşekkür ederiz.
Beko
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.