जवाबों:
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
आप स्क्रीन डेंसिटी की जांच कर सकते हैं:
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
। नवीनतम जानकारी के लिए डॉक्स से परामर्श करें ; मैं इस उत्तर को बनाए रखने के लिए परेशान करने वाला नहीं हूं।
density
SteD द्वारा सुझाए गए अनुसार उपयोग कर सकते हैं ।)
DENSITY_XXHIGH
। मैंने भविष्य के सभी मामलों को कवर करने के लिए उत्तर में एक अस्वीकरण जोड़ा। :)
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 ने बताया कि उपयोग करने से पहले हमेशा आधिकारिक डॉक्स से परामर्श करें
उपरोक्त उत्तरों से, मैंने उन्हें संयोजित किया और नीचे दिए गए फ़ंक्शन को बनाया:
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));
}
प्रतिक्रियाशील मूल निवासी के लिए यह जांचने के लिए कि वर्तमान में कौन सा आकार डिवाइस का है
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 सेटिंग्स, और डीपीआई में प्रदर्शित आकार के आधार पर मूल्यों की एक श्रृंखला लौटाएगा। वे मान आपके द्वारा चाक किए गए सटीक मानों के साथ सह-वृद्धि नहीं करेंगे।
कुछ उपकरणों पर (मेरा गैलेक्सी टैब 3 है), घनत्व और घनत्व दोनों डीपीआई 1.33 (घनत्व), 213 (घनत्वडीपी) जैसे अजीब मान लौटाते हैं। इसलिए मेरा समाधान इन झंडे को जोड़ना है:
<आइटम प्रकार = "बूल" नाम = "is_mdpi"> [बूल] </ आइटम>
<आइटम प्रकार = "बूल" नाम = "is_hdpi"> [बूल] </ आइटम>
<आइटम प्रकार = "बूल" नाम = " is_xhdpi "> [बूल] </ आइटम>
<आइटम प्रकार =" बूल "नाम =" is_xxhdpi "> [बूल] </ आइटम>
4 मानों के लिए। xml फाइलें, इन्हें रिस / वैल्यू- [xxx] / फ़ोल्डरों के नीचे रखें।