Android में हर अलग स्क्रीन आकार के लिए dimens.xml को कैसे परिभाषित करें?


128

एंड्रॉइड में विभिन्न स्क्रीन आकार (घनत्व) का समर्थन करते समय अक्सर हर संभव स्क्रीन के लिए अलग लेआउट बनाने पर ध्यान दिया जाता है। अर्थात

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

मैंने एक संदर्भ के रूप में एक xhdpi स्क्रीन के लिए एक लेआउट डिज़ाइन किया , और इसे डिमेंस . xml में आयामों को परिभाषित किया । अब मैं इसे हर संभव स्क्रीन साइज को सपोर्ट देना चाहता हूं। मैं उसे कैसे कर सकता हूँ?

जहां तक ​​मुझे पता है, मैं इस टूल का उपयोग अन्य स्क्रीन साइज के लिए उचित डिमेंस.xml का पता लगाने के लिए कर सकता हूं और इसे अपने प्रोजेक्ट में जोड़ सकता हूं। क्या यह मेरी स्थिति में ऐसा करने का सही तरीका है?

एक और सवाल, क्या मुझे केवल स्क्रीन आयामों के लिए dimens.xml बनाने की आवश्यकता है ? यदि हाँ तो क्या है w820dp?

आपकी सहायता के लिए धन्यवाद। मुझे केवल फोन का समर्थन करने की आवश्यकता है (टैबलेट या अन्य डिवाइस नहीं)।


1
हां, आपको dimesn.xmlविभिन्न प्रस्तावों के लिए एक अलग फाइल बनानी होगी ।
पीयूष

@PiyushGupta कि सभी आयामी स्क्रीन के ऊपर होगा? लेकिन W820dpयह अलग-अलग एंड्रॉइड वर्जन को सपोर्ट करने वाली चीज क्या है ? इसके अलावा क्या आप मुझे डिमेन्स.एक्सएमएल के आधार पर विभिन्न स्क्रीन का समर्थन करने के लिए कोई भी ट्यूटोरियल सुझा सकते हैं?
अमित पाल

यह टैबलेट के लिए या दूसरों के लिए है। अन्यथा जैसा कि मैंने कहा कि आपको एक अलग मान फ़ोल्डर बनाने की आवश्यकता है।
पीयूष

जवाबों:


266

आपको अलग-अलग स्क्रीन के लिए अलग-अलग वैल्यू के फोल्डर बनाने होंगे । पसंद

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

यहाँ छवि विवरण दर्ज करें

अधिक जानकारी के लिए आप यहां जा सकते हैं

Android में विभिन्न मान फ़ोल्डर

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

@Humblerookie द्वारा संपादित

आप कस्टम स्केल पैमानों के आधार पर अन्य पिक्सेल बकेट के लिए डाइमेंशन को ऑटो जेनरेट करने के लिए एंड्रॉइड स्टूडियो प्लगइन नाम का उपयोग कर सकते हैं । इसके अभी भी बीटा में, डेवलपर के सामने आने वाले किसी भी मुद्दे / सुझावों को सूचित करना सुनिश्चित करें।


1
वहाँ "मूल्यों- sw480dp-hdpi" नहीं होना चाहिए। xhdpi और xxhdpi और इतने पर? केवल 320dp आपके उत्तर में ऐसा है .. कृपया उत्तर दें
Sharp Edge

2
@IntelliJAmiya: आपको Android <= 3.2 और> 3.2 के बीच अंतर का उल्लेख करना चाहिए।
जुएरेन डी

5
@IntelliJAmiya मैंने एक स्टूडियो प्लगइन बनाया है जिसे डिमनीज़ कहा जाता है। इससे आप आसानी से अन्य बाल्टियों के लिए आयाम बना सकते हैं। क्या आप उसी के साथ एक संपादन जोड़ सकते हैं ताकि अन्य उसका उपयोग कर सकें? plugins.jetbrains.com/androidstudio/plugin/9349-dimenify
humblerookie

3
यह डिमनीज़ एक महान उपकरण है
मुहम्मद रिफैट

1
@IntelliJAmiya निश्चित रूप से, नई रिलीज़ होंगी जो उन फ़ोल्डरों पर शामिल नहीं होंगी और / या कुछ फ़ोल्डर पर उपयुक्त नहीं हो सकती हैं।
राल्फगैब

35

स्केलेबल डीपी का उपयोग करें

यद्यपि विभिन्न स्क्रीन आकारों के लिए एक अलग लेआउट बनाना सैद्धांतिक रूप से एक अच्छा विचार है, यह सभी स्क्रीन आयामों और पिक्सेल घनत्व के लिए समायोजित करना बहुत मुश्किल हो सकता है । dimens.xmlउपर्युक्त उत्तरों में सुझाए गए अनुसार 20+ से अधिक विभिन्न फ़ाइलों का प्रबंधन करना आसान नहीं है।

कैसे इस्तेमाल करे:

उपयोग करने के लिए sdp:

  1. implementation 'com.intuit.sdp:sdp-android:1.0.5'अपने में शामिल करें build.gradle,
  2. किसी भी बदलें dpजैसे मूल्य 50dpएक साथ @dimen/50_sdpइतनी तरह:

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

यह काम किस प्रकार करता है:

sdpस्क्रीन आकार के साथ तराजू क्योंकि यह अनिवार्य रूप से dimens.xmlहर संभव dpमूल्य के लिए अलग-अलग की एक विशाल सूची है ।

यहाँ छवि विवरण दर्ज करें

इसे कार्रवाई में देखें:

यहाँ यह व्यापक रूप से भिन्न स्क्रीन आयामों और घनत्व के साथ तीन उपकरणों पर है:

यहाँ छवि विवरण दर्ज करें

ध्यान दें कि sdpआकार इकाई गणना में कुछ प्रदर्शन और प्रयोज्य बाधाओं के कारण कुछ सन्निकटन शामिल हैं।


बहुत आभारी। यह वास्तव में मेरे लिए उपयोगी था।
twenk11k

@ एडवाइट क्या आप मुझे बता सकते हैं कि 2560x1440 रिज़ॉल्यूशन वाले 5.5 इंच मोबाइल के साथ सैमसंग एज 7 के लिए मुझे कौन से वैल्यू फोल्डर का इस्तेमाल करना चाहिए?
उल्हास पाटिल

@ Advait वर्तमान में मैं मानों-xxhdpi फ़ोल्डर का उपयोग कर रहा हूं, लेकिन समस्या यह है कि यह 5, 5.5 और 6 स्क्रीन के लिए समान फ़ोल्डर ले रहा है, इसलिए 5 इंच स्क्रीन और 5.5 पर स्क्रॉल दिखाई देता है। मैं ऐसा नहीं चाहता। क्या आप इसमें मेरी मदद कर सकते हैं?
उल्हास पाटिल

@ Advait S मान 5.5- 1080x1920 के लिए xxhdpi और 5.5 के लिए भी "1440x2560" मैं 5.5 के लिए अलग फ़ोल्डर चाहता हूँ "1440x2560।
उल्हास पाटिल

@ULHASPATIL बिल्कुल! मैं इसी तरह की समस्या से टकरा रहा हूं और समझ नहीं पा रहा हूं कि इसे कैसे सुलझाया जाए। क्या आपको समान इंच और विभिन्न पिक्सेल रिज़ॉल्यूशन वाली स्क्रीन के लिए कोई समाधान मिला?
जार्जिया चेबटारेव

27

हम विभिन्न स्क्रीन में आवश्यक दृश्य आकार में परिवर्तन देखना चाहते हैं।

हमें अलग-अलग स्क्रीन के लिए एक अलग वैल्यू फोल्डर बनाने और स्क्रीन डेंसिटी के आधार पर डिमेंस.एक्सएमएल फाइल डालने की जरूरत है।

मैंने एक TextView को लिया है और जब मैंने डिमेंस.xml को अलग-अलग वैल्यू के फोल्डर में बदला है, तो मैंने उन बदलावों को देखा है।

कृपया प्रक्रिया का पालन करें

सामान्य - xhdpi \ dimens.xml

नीचे दिए गए उपकरण स्क्रीन के आकार को बदल सकते हैं जब हम सामान्य बदलते हैं - xhdpi \ dimens.xml

नेक्सस 5 एक्स (5.2 "* 1080 * 1920: 420 डीपीआई)

नेक्सस 6 पी (5.7 "* 1440 * 2560: 560 डीपीआई)

नेक्सस 6 (6.0 "* 1440 * 2560: 560 डीपीआई)

नेक्सस 5 (5.0 ", 1080 1920: xxhdpi)

नेक्सस 4 (4.7 ", 768 * 1280: xhdpi)

गैलेक्सी नेक्सस (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 को बदलते हैं

नेक्सस 9 (8.9 ", 2048 * 1556: xhdpi)

नेक्सस 10 (10.1 ", 2560 * 1600: xhdpi)

बड़े - xhdpi \ dimens.xml

जब हम बड़े - xhdpi \ dimens.xml को बदलते हैं तो नीचे के उपकरण स्क्रीन के आकार को बदल सकते हैं

नेक्सस 7 (7.0 ", 1200 * 1920: xhdpi)

नेक्सस 7 (2012) (7.0 ", 800 * 1280: टीवीडीपी)

नीचे दी गई स्क्रीन "सर्च जेनेरिक फ़ोन और टैबलेट" में दिखाई देती हैं

बड़े - mdpi \ dimens.xml

जब हम बड़े - mdpi \ dimens.xml को बदलते हैं तो नीचे के उपकरण स्क्रीन के आकार को बदल सकते हैं

5.1 "WVGA (480 * 800: mdpi)

5.4 "एफडब्ल्यूवीजीए (480 * 854: mdpi)

7.0 "WSVGA (टैबलेट) (1024 * 600: mdpi)

सामान्य - hdpi \ dimens.xml

नीचे दिए गए डिवाइस स्क्रीन के आकार को बदल सकते हैं जब हम सामान्य बदलते हैं - एचडीपीआई \ _ डिमेंस.एक्सएमएल

नेक्सस एस (4.0 ", 480 * 800: एचडीपीआई)

नेक्सस वन (3.7 ", 480 * 800: एचडीपीआई)

छोटा - ldpi \ dimens.xml

जब हम छोटे - ldpi \ dimens.xml को बदलते हैं, तो नीचे के उपकरण स्क्रीन के आकार को बदल सकते हैं

2.7 "QVGA स्लाइडर (240 * 320: ldpi)

2.7 "QVGA (240 * 320: ldpi)

xlarge - mdpi \ dimens.xml

नीचे दिए गए डिवाइस स्क्रीन के आकार को बदल सकते हैं जब हम xlarge - mdpi \ dimens.xml को बदलते हैं

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

सामान्य - ldpi \ dimens.xml

जब हम सामान्य - ldpi \ dimens.xml बदलते हैं, तो नीचे के उपकरण स्क्रीन के आकार को बदल सकते हैं

3.3 "WQVGA (240 * 400: LDPI)

3.4 "WQVGA (240 * 432: LDPI)

सामान्य - hdpi \ dimens.xml

नीचे दिए गए डिवाइस स्क्रीन के आकार को बदल सकते हैं जब हम सामान्य बदलते हैं - एचडीपीआई \ _ डिमेंस.एक्सएमएल

4.0 "डब्ल्यूवीजीए (480 * 800: एचडीपीआई)

3.7 "डब्ल्यूवीजीए (480 * 800: एचडीपीआई)

3.7 "एफडब्ल्यूवीजीए स्लाइडर (480 * 854: एचडीपीआई)

सामान्य - mdpi \ dimens.xml

जब हम सामान्य - mdpi \ dimens.xml बदलते हैं, तो नीचे के उपकरण स्क्रीन के आकार को बदल सकते हैं

3.2 "एचवीजीए स्लाइडर (ADP1) (320 * 480: MDPI)

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


तो आपके अनुसार फोल्डर का नाम कुछ इस तरह होगा values-normal-xhdpi?
वॉनस्नाउजर

हां, मैं आपके साथ सहमत हूं, लिखने के मानों के बजाय- सभी फ़ाइलों के लिए, मैंने कहा, "विभिन्न पाठ आकारों के लिए अलग-अलग मान फ़ोल्डर बनाएं"। तो कृपया शीर्षक पढ़ें। धन्यवाद।
कोटेश्वरो

9

अच्छी लाइब्रेरियाँ हैं जो सब कुछ संभालेंगी और आपके दर्द को कम करेंगी। इसका उपयोग करने के लिए, केवल दो निर्भरताएँ जोड़ दें:

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

उसके बाद, dimensइस तरह का उपयोग करें:

        android:layout_marginTop="@dimen/_80sdp"

3
यहां संदर्भ के लिए पुस्तकालय हैं: एसडीपी और एसएसपी । और इस सटीक उत्तर के लिए धन्यवाद!
जोर्जएएमवीएफ

7

मैंने एक साधारण जावा प्रोग्राम अपलोड किया है जो आपके प्रोजेक्ट स्थान और इनपुट के रूप में इच्छित आयाम फ़ाइल लेता है। उसके आधार पर, यह कंसोल में संबंधित आयाम फ़ाइल को आउटपुट करेगा। इसका लिंक यहां दिया गया है:

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

यहाँ संदर्भ के लिए पूर्ण कोड है:

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

आपको अलग- valuesअलग स्क्रीन के लिए एक अलग फ़ोल्डर बनाना होगा और dimens.xmlघनत्व के अनुसार फ़ाइल डालनी होगी।

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)

मुझे स्क्रीन आकार के बीच राशन कहां मिल सकता है? जैसा कि मैं टूल में देख सकता हूं कि उन्होंने सब कुछ परिभाषित किया है ldpi, mdpiढंग से
अमित पाल

यह आपके मूल्यों के फ़ोल्डर पर निर्भर करेगा जो इसमें से अधिकांश पर पूर्वव्यापी मान होगा।
पीयूष

क्या मुझे values-xxhdpiNexus 6 के लिए उल्लेख करने की आवश्यकता है ?
अमित पाल

हाँ आपको होना चाहिए!
पीयूष

320x480ठेठ mdpi है । इसलिए, यह या तो में डाल valuesया मेंvalues-mdpi
Phantômaxx

6

dimens.xmlमें डाल सकते हैं

1) मान

2) मान-एचडीपीआई

3) मान-एक्सएचडीपीआई

4) मान- xxhdpi

और dimens.xmlघनत्व के अनुसार संबंधित फ़ोल्डरों के भीतर अलग-अलग आकार दें ।


2
Android प्रलेखन के अनुसार छोटे / सामान्य / बड़े पदावनत हैं।
बेंजामिन मेसिंग

1

मामले में आप अधिक देखना चाहते: यहाँ एक है लिंक डिवाइस (टेबलेट, मोबाइल, घड़ियां), सहित की एक सूची के लिए watch, chromebook, windowsऔर mac। यहाँ आप घनत्व, आयाम, और आदि पा सकते हैं। बस यहाँ पर आधारित है, यह एक अच्छा संसाधन है यदि आपका एमुलेटर भी उपयोग कर रहा है।

यदि आप किसी विशिष्ट आइटम पर क्लिक करते हैं, तो यह दाईं ओर अधिक विवरण दिखाएगा। नमूना

चूंकि Android, मैं इससे संबंधित पोस्ट करूंगा। sample1

sample2

~ यदि आप वेब की एक प्रति सहेजते हैं तो बेहतर है। इसे ऑफ़लाइन देखने के लिए।


1

एंड्रॉइड 3.2 स्क्रीन आकारों के लिए एक नया दृष्टिकोण पेश करता है, स्क्रीन आकार का वर्णन करने वाली संख्याएं सभी "डीपी" इकाइयों में हैं। आमतौर पर हम इसका उपयोग कर सकते हैं

सबसे छोटी चौड़ाई डीपी: "डीपी" इकाइयों में एप्लिकेशन लेआउट के लिए उपलब्ध सबसे छोटी चौड़ाई; यह सबसे छोटी चौड़ाई का dp है जिसे आप कभी भी प्रदर्शन के किसी भी रोटेशन में सामना करेंगे।

Res पर एक राइट क्लिक करने के लिए >>> नया >>> Android संसाधन निर्देशिका

से उपलब्ध क्वालिफायर खिड़की चाल सबसे छोटा स्क्रीन चौड़ाई के लिए चुना क्वालिफायर

में स्क्रीन चौड़ाई खिड़की बस "डी पी" मूल्य तुम से शुरू है कि dimens उपयोग करने के लिए एंड्रॉयड स्टूडियो चाहते हैं लिखें।

प्रोजेक्ट दृश्य में परिवर्तन से , अपने नए बनाए गए संसाधन निर्देशिका पर राइट क्लिक करें

नई >>> मान संसाधन फ़ाइल एक नया फ़ाइल नाम दर्ज करें dimens.xml और आप कर रहे हैं।


वास्तव में इन फ़ोल्डरों को बनाने के बारे में समझाने के लिए धन्यवाद।
बेको
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.