2013-06-17 6 views
5

के आधार पर कौन से संसाधन फ़ोल्डर का उपयोग किया जाता है (प्रोग्रामेटिक रूप से) का उपयोग करने का सबसे आसान तरीका यह है कि रनटाइम के दौरान एंड्रॉइड द्वारा कौन सा लेआउट (और अन्य संसाधन) चुना जाता है, स्क्रीन घनत्व और आकार के आधार पर एकाधिक स्क्रीन का समर्थन?स्क्रीन घनत्व/आकार

मुझे फ़ोल्डर का नाम जानना होगा।

संपादित करें:

मैं फ़ोल्डर के नाम प्रोग्राम के रूप में जानना चाहते हैं।

+0

कोड से या डिवाइस और प्रोजेक्ट संरचना को देखकर और खुद से पूछें: इस डिवाइस को ऐसे लेआउट/ड्रायबल कहां से मिले? –

+0

हां, क्षमा करें। मैं अपना प्रश्न परिशोधित करता हूं। –

+0

मुझे लगता है कि फ़ोल्डर नाम प्राप्त करने के लिए यह सबसे उपयुक्त हो सकता है: http://stackoverflow.com/a/19155853/490683 – Larphoid

उत्तर

15

यदि आप इसे डिबगिंग उद्देश्यों के लिए कर रहे हैं, तो मैं ऐसा कुछ करने की अनुशंसा करता हूं: प्रत्येक क्वालीफायर के लिए आपके पास लेआउट/ड्रायबल है, तो एक ही क्वालीफायर के साथ एक मान फ़ोल्डर है (उदाहरण के लिए यदि आपके पास लेआउट-एचडीपीआई, मिलान करने के लिए एक मान-एचडीपीआई भी है)। इन फ़ोल्डरों से प्रत्येक के लिए एक strings.xml जोड़ें, और एक स्ट्रिंग को परिभाषित:

values-hdpi में:

<string name="folder_name">hdpi</string> 

values-xhdpi में:

<string name="folder_name">xhdpi</string> 

तो बस स्ट्रिंग को हल जब आप इसे ज़रूरत है, और यह आपको बताएगा कि कौन सा फ़ोल्डर चुना गया था।

+0

कोलम्बस के अंडे ... धन्यवाद –

0

लेआउट इस कार्यक्रम के आधार पर चुना जाता है कि आप इसे कैसे प्रोग्राम करते हैं। मेनू और मूल्यों के साथ ही। तस्वीरें परिभाषा पर आधारित हैं: एचडीपीआई = उच्च परिभाषा, एलडीपीआई = कम परिभाषा ect।

+0

हाँ, मैं अपना प्रश्न परिशोधित करता हूं। –

4

कल्पना कीजिए कि आप इस तरह की एक संरचना है:

res/ 
    drawable-mdpi/image.png 
    drawable-hdpi/image.png 
    drawable-xhdpi/image.png 
    layout/main.xml 
    layout-land/main.xml 
    layout-xlarge/main.xml 
    layout-sw600dp/main.xml 

और आप को पता है, जो लेआउट प्रयोग किया जाता है चाहता हूँ।

एक तरह से संसाधनों में एक मूल्य डाल करने के लिए होगा:

res/ 
    values-mdpi/strange_info.xml with: 
     <string name="image_is_from_folder">drawable-mdpi</string> 
    values-hdpi/strange_info.xml with: 
     <string name="image_is_from_folder">drawable-hdpi</string> 
    values-xhdpi/strange_info.xml with: 
     <string name="image_is_from_folder">drawable-xhdpi</string> 

    values/strange_info.xml with: 
     <string name="main_is_from_folder">layout</string> 
    values-land/strange_info.xml with: 
     <string name="main_is_from_folder">layout-land</string> 
    values-xlarge/strange_info.xml with: 
     <string name="main_is_from_folder">layout-xlarge</string> 
    values-sw600dp/strange_info.xml with: 
     <string name="main_is_from_folder">layout-sw600dp</string> 

कोड में आप सिर्फ

String mainFolderName = context.getResources().getString(R.string.main_is_from_folder); 

मैं -Xdpi क्वालीफायर के बारे में कुछ संदेह है, लेकिन यह (काम करना चाहिए परीक्षण नहीं)। ध्यान दें कि उपर्युक्त संरचना के साथ आपको image.png के लिए ldpi उपकरणों पर "drawable-hdpi" मिलेगा।

6
DisplayMetrics metrics = new DisplayMetrics(); 
getWindowManager().getDefaultDisplay().getMetrics(metrics); 
switch(metrics.densityDpi){ 
       case DisplayMetrics.DENSITY_LOW: 
        break; 
       case DisplayMetrics.DENSITY_MEDIUM: 
        break; 
       case DisplayMetrics.DENSITY_HIGH: 
        break; 
       case DisplayMetrics.DENSITY_XHIGH: 
        break; 
       case DisplayMetrics.DENSITY_XXHIGH: 
        break; 
       case DisplayMetrics.DENSITY_XXXHIGH: 
        break; 
      } 
+0

अच्छा समाधान :) thx – 5er

+0

यह समाधान हमेशा काम नहीं करता है। मेरे नेक्सस 5 एक्स पर घनत्व डीपीआई लौटा 420 है, जो DENSITY_XHIGH और DENSITY_XXHIGH के बीच है। मैं @kcoppock द्वारा प्रदान किए गए समाधान की अनुशंसा करता हूं –

संबंधित मुद्दे