android - एंड्रॉइड में रनटाइम पर डीपी या डुबकी के मामले में स्क्रीन चौड़ाई कैसे निर्धारित करें?




dip (4)

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

int pixel=this.getWindowManager().getDefaultDisplay().getWidth() ;

यह पिक्सेल (पीएक्स) में स्क्रीन चौड़ाई लौटाता है। इसे डीपी में बदलने के लिए, मैंने कोड किया:

int dp =pixel/(int)getResources().getDisplayMetrics().density ;

ऐसा लगता है कि यह सही जवाब नहीं दे रहा है। मैंने WVGA800 का एमुलेटर बनाया जिसका स्क्रीन रेज़ोल्यूशन 480 से 800 है। जब एमुलेटर चलाएं और कोड को पिक्सेल और डीपी के मान प्रिंट करें, तो यह दोनों में 320 हो गया। यह एम्यूलेटर 240 डीपीआई है जिसका स्केल कारक 0.75 होगा।


आप 160 के डिफ़ॉल्ट घनत्व मान खो रहे हैं।

    2 px = 3 dip if dpi == 80(ldpi), 320x240 screen
    1 px = 1 dip if dpi == 160(mdpi), 480x320 screen
    3 px = 2 dip if dpi == 240(hdpi), 840x480 screen

दूसरे शब्दों में, यदि आप पोर्ट्रेट मोड में 160 डीप के बराबर चौड़ाई के साथ लेआउट डिज़ाइन करते हैं, तो यह सभी ldpi / mdpi / hdpi डिवाइस पर स्क्रीन का आधा होगा (टैबलेट को छोड़कर, मुझे लगता है)


आपकी समस्या एक int को फ्लोट कास्टिंग, सटीक खोने के साथ है। आपको कारक के साथ गुणा करना चाहिए और विभाजित नहीं करना चाहिए।

यह करो:

int dp = (int)(pixel*getResources().getDisplayMetrics().density);

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

Display display = getWindowManager().getDefaultDisplay();
DisplayMetrics outMetrics = new DisplayMetrics ();
display.getMetrics(outMetrics);

float density  = getResources().getDisplayMetrics().density;
float dpHeight = outMetrics.heightPixels / density;
float dpWidth  = outMetrics.widthPixels / density;

या

धन्यवाद @ टॉमस हबलेक

DisplayMetrics displayMetrics = context.getResources().getDisplayMetrics();    
float dpHeight = displayMetrics.heightPixels / displayMetrics.density;
float dpWidth = displayMetrics.widthPixels / displayMetrics.density;

मैंने Google से इस प्रश्न पर ठोकर खाई, और बाद में मुझे एपीआई> = 13 के लिए एक आसान समाधान मिला।

भविष्य के संदर्भों के लिए:

Configuration configuration = yourActivity.getResources().getConfiguration();
int screenWidthDp = configuration.screenWidthDp; //The current width of the available screen space, in dp units, corresponding to screen width resource qualifier.
int smallestScreenWidthDp = configuration.smallestScreenWidthDp; //The smallest screen size an application will see in normal operation, corresponding to smallest screen width resource qualifier.

कॉन्फ़िगरेशन क्लास संदर्भ देखें

संपादित करें: निक बाइकियानु द्वारा उल्लेख किया गया है, यह स्क्रीन की उपयोग योग्य चौड़ाई / ऊंचाई देता है (जो अधिकांश उपयोगों में दिलचस्प हो सकता है)। यदि आपको वास्तविक प्रदर्शन आयामों को शीर्ष उत्तर पर चिपकने की आवश्यकता है।





dip