एंड्रॉइड डिवाइस की जांच कैसे करें एचडीपीआई स्क्रीन या एमडीपीआई स्क्रीन?


121

मैं इंटरनेट द्वारा विभिन्न छवियों को लाने के लिए यह जांचना चाहता हूं। उसको कैसे करे?

जवाबों:


221
density = getResources().getDisplayMetrics().density;

// return 0.75 if it's LDPI
// return 1.0 if it's MDPI
// return 1.5 if it's HDPI
// return 2.0 if it's XHDPI
// return 3.0 if it's XXHDPI
// return 4.0 if it's XXXHDPI

9
इसमें वर्णित घनत्व मान: developer.android.com/guide/practices/screens_support.html
esilver

1
@SteD क्या यह बताने के लिए संभव है कि एक उपकरण क्या होने वाला है? उदाहरण के मामले पर विचार करें जहां बाल्टी रेंज के बीच में डीपीआई 140 है? क्या यह नीचे या ऊपर गोल है?
वाल

tvdpi लगभग 1.3 है
Ethan_AI

3
nexus 6p के लिए मैं 3.5 प्राप्त कर रहा हूं, यह किस श्रेणी में आएगा?
मनोहर रेड्डी

2
oneplus3T में 2.625 है, हमें इसमें क्या विचार करना चाहिए?
पार्थ अंजारिया

188

आप स्क्रीन डेंसिटी की जांच कर सकते हैं:

switch (getResources().getDisplayMetrics().densityDpi) {
case DisplayMetrics.DENSITY_LOW:
    // ...
    break;
case DisplayMetrics.DENSITY_MEDIUM:
    // ...
    break;
case DisplayMetrics.DENSITY_HIGH:
    // ...
    break;
case DisplayMetrics.DENSITY_XHIGH:
    // ...
    break;
}

EDIT इस बात से अवगत रहें कि जैसे ही एंड्रॉइड विकसित होता है, अन्य मानों को switchमामलों में शामिल किया जाना चाहिए । इस संपादन के रूप में, इसमें शामिल है DisplayMetrics.DENSITY_TVऔर DisplayMetrics.DENSITY_XXHIGH। नवीनतम जानकारी के लिए डॉक्स से परामर्श करें ; मैं इस उत्तर को बनाए रखने के लिए परेशान करने वाला नहीं हूं।


यह एसडीके स्तर 4 (प्लेटफॉर्म 1.6) और ऊपर मौजूद होना चाहिए। आप किस एसडीके स्तर का उपयोग कर रहे हैं? (एसडीके 3 में, आप densitySteD द्वारा सुझाए गए अनुसार उपयोग कर सकते हैं ।)
टेड हॉप

मुझे platform1.5 को लक्षित करने की आवश्यकता है। नीचे दिए गए उत्तर शायद मेरे अनुरोध के लिए उपयुक्त हैं।
virsir

4
नीचे दिया गया उत्तर अब उपरोक्त उत्तर है, और अधिक सामान्य होने की आवश्यकता है;)
नील

FYI करें, कुछ नए उपकरणों (जैसे Nexus 7) के साथ, आपको DENSITY_TV को भी शामिल करना चाहिए।
एनी

1
@annie - अच्छी बात है। धन्यवाद। एपीआई स्तर 16 के रूप में, यह भी शामिल होना चाहिए DENSITY_XXHIGH। मैंने भविष्य के सभी मामलों को कवर करने के लिए उत्तर में एक अस्वीकरण जोड़ा। :)
टेड हॉप

10

2018 के अनुसार, आप नीचे दी गई विधि का उपयोग कर सकते हैं -

    public static String getDeviceDensityString(Context context) {
    switch (context.getResources().getDisplayMetrics().densityDpi) {
        case DisplayMetrics.DENSITY_LOW:
            return "ldpi";
        case DisplayMetrics.DENSITY_MEDIUM:
            return "mdpi";
        case DisplayMetrics.DENSITY_TV:
        case DisplayMetrics.DENSITY_HIGH:
            return "hdpi";
        case DisplayMetrics.DENSITY_260:
        case DisplayMetrics.DENSITY_280:
        case DisplayMetrics.DENSITY_300:
        case DisplayMetrics.DENSITY_XHIGH:
            return "xhdpi";
        case DisplayMetrics.DENSITY_340:
        case DisplayMetrics.DENSITY_360:
        case DisplayMetrics.DENSITY_400:
        case DisplayMetrics.DENSITY_420:
        case DisplayMetrics.DENSITY_440:
        case DisplayMetrics.DENSITY_XXHIGH:
            return "xxhdpi";
        case DisplayMetrics.DENSITY_560:
        case DisplayMetrics.DENSITY_XXXHIGH:
            return "xxxhdpi";
    }
}

लेकिन जैसा कि @Ted ने बताया कि उपयोग करने से पहले हमेशा आधिकारिक डॉक्स से परामर्श करें


4

उपरोक्त उत्तरों से, मैंने उन्हें संयोजित किया और नीचे दिए गए फ़ंक्शन को बनाया:

    public static String getDeviceDensity(Context context){
    String deviceDensity = "";
    switch (context.getResources().getDisplayMetrics().densityDpi) {
        case DisplayMetrics.DENSITY_LOW:
            deviceDensity =  0.75 + " ldpi";
            break;
        case DisplayMetrics.DENSITY_MEDIUM:
            deviceDensity =  1.0 + " mdpi";
            break;
        case DisplayMetrics.DENSITY_HIGH:
            deviceDensity =  1.5 + " hdpi";
            break;
        case DisplayMetrics.DENSITY_XHIGH:
            deviceDensity =  2.0 + " xhdpi";
            break;
        case DisplayMetrics.DENSITY_XXHIGH:
            deviceDensity =  3.0 + " xxhdpi";
            break;
        case DisplayMetrics.DENSITY_XXXHIGH:
            deviceDensity =  4.0 + " xxxhdpi";
            break;
        default:
            deviceDensity = "Not found";
    }
    return deviceDensity;
}

अब, आप किस डिवाइस पर घनत्व की जानकारी प्राप्त करना चाहते हैं और किस फ़ोल्डर का उपयोग किया जाएगा, बस उस गतिविधि में उपरोक्त विधि जोड़ें और नीचे पंक्ति को ऑनक्रिएट में जोड़ें

    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_login);

    Log.d("Screen Density: ", Helper.getDeviceDensity(this));

}

2

प्रतिक्रियाशील मूल निवासी के लिए यह जांचने के लिए कि वर्तमान में कौन सा आकार डिवाइस का है

import { PixelRatio } from 'react-native';   
 switch(PixelRatio.get()) {
      case 1:
      return "mdpi";
      case 1.5:
      return "hdpi";
      case 2:
      return "xhdpi";
      case 3:
      return "xxhdpi";
      case 3.5:
      return "xxxhdpi";
    }


यह काम नहीं करेगा। PixelRatio.get()Android सेटिंग्स, और डीपीआई में प्रदर्शित आकार के आधार पर मूल्यों की एक श्रृंखला लौटाएगा। वे मान आपके द्वारा चाक किए गए सटीक मानों के साथ सह-वृद्धि नहीं करेंगे।
EnKrypt

0

कुछ उपकरणों पर (मेरा गैलेक्सी टैब 3 है), घनत्व और घनत्व दोनों डीपीआई 1.33 (घनत्व), 213 (घनत्वडीपी) जैसे अजीब मान लौटाते हैं। इसलिए मेरा समाधान इन झंडे को जोड़ना है:

<आइटम प्रकार = "बूल" नाम = "is_mdpi"> [बूल] </ आइटम>
<आइटम प्रकार = "बूल" नाम = "is_hdpi"> [बूल] </ आइटम>
<आइटम प्रकार = "बूल" नाम = " is_xhdpi "> [बूल] </ आइटम>
<आइटम प्रकार =" बूल "नाम =" is_xxhdpi "> [बूल] </ आइटम>

4 मानों के लिए। xml फाइलें, इन्हें रिस / वैल्यू- [xxx] / फ़ोल्डरों के नीचे रखें।


6
213dpi एक प्रसिद्ध घनत्व है, "tvdpi": developer.android.com/guide/practices/…
क्रिस्टोफर ओर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.