जवाबों:
आप Configuration.screenLayout
बिटमास्क का उपयोग कर सकते हैं ।
उदाहरण:
if ((getResources().getConfiguration().screenLayout &
Configuration.SCREENLAYOUT_SIZE_MASK) ==
Configuration.SCREENLAYOUT_SIZE_LARGE) {
// on a large screen device ...
}
नीचे दिया गया कोड ऊपर दिए गए उत्तर को मिटा देता है, स्क्रीन आकार को टोस्ट के रूप में प्रदर्शित करता है ।
//Determine screen size
if ((getResources().getConfiguration().screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK) == Configuration.SCREENLAYOUT_SIZE_LARGE) {
Toast.makeText(this, "Large screen", Toast.LENGTH_LONG).show();
}
else if ((getResources().getConfiguration().screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK) == Configuration.SCREENLAYOUT_SIZE_NORMAL) {
Toast.makeText(this, "Normal sized screen", Toast.LENGTH_LONG).show();
}
else if ((getResources().getConfiguration().screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK) == Configuration.SCREENLAYOUT_SIZE_SMALL) {
Toast.makeText(this, "Small sized screen", Toast.LENGTH_LONG).show();
}
else {
Toast.makeText(this, "Screen size is neither large, normal or small", Toast.LENGTH_LONG).show();
}
नीचे यह कोड स्क्रीन घनत्व को टोस्ट के रूप में प्रदर्शित करता है ।
//Determine density
DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
int density = metrics.densityDpi;
if (density == DisplayMetrics.DENSITY_HIGH) {
Toast.makeText(this, "DENSITY_HIGH... Density is " + String.valueOf(density), Toast.LENGTH_LONG).show();
}
else if (density == DisplayMetrics.DENSITY_MEDIUM) {
Toast.makeText(this, "DENSITY_MEDIUM... Density is " + String.valueOf(density), Toast.LENGTH_LONG).show();
}
else if (density == DisplayMetrics.DENSITY_LOW) {
Toast.makeText(this, "DENSITY_LOW... Density is " + String.valueOf(density), Toast.LENGTH_LONG).show();
}
else {
Toast.makeText(this, "Density is neither HIGH, MEDIUM OR LOW. Density is " + String.valueOf(density), Toast.LENGTH_LONG).show();
}
एक स्थिर सहायक विधि के रूप में जेफ गिलफेल्ट का जवाब:
private static String getSizeName(Context context) {
int screenLayout = context.getResources().getConfiguration().screenLayout;
screenLayout &= Configuration.SCREENLAYOUT_SIZE_MASK;
switch (screenLayout) {
case Configuration.SCREENLAYOUT_SIZE_SMALL:
return "small";
case Configuration.SCREENLAYOUT_SIZE_NORMAL:
return "normal";
case Configuration.SCREENLAYOUT_SIZE_LARGE:
return "large";
case 4: // Configuration.SCREENLAYOUT_SIZE_XLARGE is API >= 9
return "xlarge";
default:
return "undefined";
}
}
private String getDeviceDensity() {
int density = mContext.getResources().getDisplayMetrics().densityDpi;
switch (density)
{
case DisplayMetrics.DENSITY_MEDIUM:
return "MDPI";
case DisplayMetrics.DENSITY_HIGH:
return "HDPI";
case DisplayMetrics.DENSITY_LOW:
return "LDPI";
case DisplayMetrics.DENSITY_XHIGH:
return "XHDPI";
case DisplayMetrics.DENSITY_TV:
return "TV";
case DisplayMetrics.DENSITY_XXHIGH:
return "XXHDPI";
case DisplayMetrics.DENSITY_XXXHIGH:
return "XXXHDPI";
default:
return "Unknown";
}
}
ऊपर दिए गए उत्तर के लिए धन्यवाद, जिसने मुझे बहुत मदद की :-) लेकिन उन (मेरे जैसे) के लिए अभी भी एंड्रॉइड 1.5 का समर्थन करने के लिए मजबूर किया गया है हम पिछड़े संगत के लिए जावा प्रतिबिंब का उपयोग कर सकते हैं:
Configuration conf = getResources().getConfiguration();
int screenLayout = 1; // application default behavior
try {
Field field = conf.getClass().getDeclaredField("screenLayout");
screenLayout = field.getInt(conf);
} catch (Exception e) {
// NoSuchFieldException or related stuff
}
// Configuration.SCREENLAYOUT_SIZE_MASK == 15
int screenType = screenLayout & 15;
// Configuration.SCREENLAYOUT_SIZE_SMALL == 1
// Configuration.SCREENLAYOUT_SIZE_NORMAL == 2
// Configuration.SCREENLAYOUT_SIZE_LARGE == 3
// Configuration.SCREENLAYOUT_SIZE_XLARGE == 4
if (screenType == 1) {
...
} else if (screenType == 2) {
...
} else if (screenType == 3) {
...
} else if (screenType == 4) {
...
} else { // undefined
...
}
Configuration
कक्षा से स्थिरांक का संदर्भ ले सकते हैं । ये स्थिर अंतिम मान हैं जो संकलन समय पर (जो कि उनके वास्तविक मूल्यों द्वारा प्रतिस्थापित किए जाएंगे) इनलेट किए जाएंगे, इसलिए आपका कोड प्लेटफ़ॉर्म के पुराने संस्करणों पर नहीं टूटेगा।
targetSdkVersion
उन्हें नवीनतम रिलीज़ पर सेट किया ।
यदि आप किसी Android डिवाइस के स्क्रीन घनत्व और आकार को आसानी से जानना चाहते हैं, तो आप इस निःशुल्क एप्लिकेशन (कोई अनुमति की आवश्यकता नहीं) का उपयोग कर सकते हैं: https://market.android.com/details?id=com.jotabout.screeninfo
Xlarge स्क्रीन और x..high densities की जांच करने की आवश्यकता है? यह चुने हुए उत्तर से परिवर्तित कोड है।
//Determine screen size
if ((getResources().getConfiguration().screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK) == Configuration.SCREENLAYOUT_SIZE_LARGE) {
Toast.makeText(this, "Large screen",Toast.LENGTH_LONG).show();
} else if ((getResources().getConfiguration().screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK) == Configuration.SCREENLAYOUT_SIZE_NORMAL) {
Toast.makeText(this, "Normal sized screen" , Toast.LENGTH_LONG).show();
} else if ((getResources().getConfiguration().screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK) == Configuration.SCREENLAYOUT_SIZE_SMALL) {
Toast.makeText(this, "Small sized screen" , Toast.LENGTH_LONG).show();
} else if ((getResources().getConfiguration().screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK) == Configuration.SCREENLAYOUT_SIZE_XLARGE) {
Toast.makeText(this, "XLarge sized screen" , Toast.LENGTH_LONG).show();
} else {
Toast.makeText(this, "Screen size is neither large, normal or small" , Toast.LENGTH_LONG).show();
}
//Determine density
DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
int density = metrics.densityDpi;
if (density==DisplayMetrics.DENSITY_HIGH) {
Toast.makeText(this, "DENSITY_HIGH... Density is " + String.valueOf(density), Toast.LENGTH_LONG).show();
} else if (density==DisplayMetrics.DENSITY_MEDIUM) {
Toast.makeText(this, "DENSITY_MEDIUM... Density is " + String.valueOf(density), Toast.LENGTH_LONG).show();
} else if (density==DisplayMetrics.DENSITY_LOW) {
Toast.makeText(this, "DENSITY_LOW... Density is " + String.valueOf(density), Toast.LENGTH_LONG).show();
} else if (density==DisplayMetrics.DENSITY_XHIGH) {
Toast.makeText(this, "DENSITY_XHIGH... Density is " + String.valueOf(density), Toast.LENGTH_LONG).show();
} else if (density==DisplayMetrics.DENSITY_XXHIGH) {
Toast.makeText(this, "DENSITY_XXHIGH... Density is " + String.valueOf(density), Toast.LENGTH_LONG).show();
} else if (density==DisplayMetrics.DENSITY_XXXHIGH) {
Toast.makeText(this, "DENSITY_XXXHIGH... Density is " + String.valueOf(density), Toast.LENGTH_LONG).show();
} else {
Toast.makeText(this, "Density is neither HIGH, MEDIUM OR LOW. Density is " + String.valueOf(density), Toast.LENGTH_LONG).show();
}
यहाँ टॉम मैकफर्लिन के जवाब का एक एक्समरीन.एन्ड्रॉयड संस्करण है
//Determine screen size
if ((Application.Context.Resources.Configuration.ScreenLayout & ScreenLayout.SizeMask) == ScreenLayout.SizeLarge) {
Toast.MakeText (this, "Large screen", ToastLength.Short).Show ();
} else if ((Application.Context.Resources.Configuration.ScreenLayout & ScreenLayout.SizeMask) == ScreenLayout.SizeNormal) {
Toast.MakeText (this, "Normal screen", ToastLength.Short).Show ();
} else if ((Application.Context.Resources.Configuration.ScreenLayout & ScreenLayout.SizeMask) == ScreenLayout.SizeSmall) {
Toast.MakeText (this, "Small screen", ToastLength.Short).Show ();
} else if ((Application.Context.Resources.Configuration.ScreenLayout & ScreenLayout.SizeMask) == ScreenLayout.SizeXlarge) {
Toast.MakeText (this, "XLarge screen", ToastLength.Short).Show ();
} else {
Toast.MakeText (this, "Screen size is neither large, normal or small", ToastLength.Short).Show ();
}
//Determine density
DisplayMetrics metrics = new DisplayMetrics();
WindowManager.DefaultDisplay.GetMetrics (metrics);
var density = metrics.DensityDpi;
if (density == DisplayMetricsDensity.High) {
Toast.MakeText (this, "DENSITY_HIGH... Density is " + density, ToastLength.Long).Show ();
} else if (density == DisplayMetricsDensity.Medium) {
Toast.MakeText (this, "DENSITY_MEDIUM... Density is " + density, ToastLength.Long).Show ();
} else if (density == DisplayMetricsDensity.Low) {
Toast.MakeText (this, "DENSITY_LOW... Density is " + density, ToastLength.Long).Show ();
} else if (density == DisplayMetricsDensity.Xhigh) {
Toast.MakeText (this, "DENSITY_XHIGH... Density is " + density, ToastLength.Long).Show ();
} else if (density == DisplayMetricsDensity.Xxhigh) {
Toast.MakeText (this, "DENSITY_XXHIGH... Density is " + density, ToastLength.Long).Show ();
} else if (density == DisplayMetricsDensity.Xxxhigh) {
Toast.MakeText (this, "DENSITY_XXXHIGH... Density is " + density, ToastLength.Long).Show ();
} else {
Toast.MakeText (this, "Density is neither HIGH, MEDIUM OR LOW. Density is " + density, ToastLength.Long).Show ();
}
इस फ़ंक्शन को आज़माएं ILayoutSizeAtLeast (int screenSize)
छोटी स्क्रीन की जाँच करने के लिए, कम से कम 320x426 डीपी और उससे ऊपर getResources ()। GetConfiguration () .LayoutSizeAtLeast (कॉन्फ़िगरेशन .CREENLAYOUT_SIZE_SMALL);
सामान्य स्क्रीन की जाँच करने के लिए, कम से कम 320x470 डीपी और उससे ऊपर getResources ()। GetConfiguration () .LayoutSizeAtLeast (कॉन्फ़िगरेशन .CREENLAYOUT_SIZE_NORMAL);
बड़ी स्क्रीन की जांच करने के लिए, कम से कम 480x640 डीपी और उससे ऊपर getResources ()। GetConfiguration () .LayoutSizeAtLeast (कॉन्फ़िगरेशन .CREENLAYOUT_SIZE_LARGE);
अतिरिक्त बड़ी स्क्रीन की जाँच करने के लिए, कम से कम 720x960 डीपी और ऊपर getResources ()। GetConfuration ()। IsLayoutSizeAtLeast (configuration.SCREENLAYOUT_SIZE_XLARGE);
2018 में, अगर आपको कोटलिन में जेफ के जवाब की आवश्यकता है, तो यह है:
private fun determineScreenSize(): String {
// Thanks to https://stackoverflow.com/a/5016350/2563009.
val screenLayout = resources.configuration.screenLayout
return when {
screenLayout and Configuration.SCREENLAYOUT_SIZE_MASK == Configuration.SCREENLAYOUT_SIZE_SMALL -> "Small"
screenLayout and Configuration.SCREENLAYOUT_SIZE_MASK == Configuration.SCREENLAYOUT_SIZE_NORMAL -> "Normal"
screenLayout and Configuration.SCREENLAYOUT_SIZE_MASK == Configuration.SCREENLAYOUT_SIZE_LARGE -> "Large"
screenLayout and Configuration.SCREENLAYOUT_SIZE_MASK == Configuration.SCREENLAYOUT_SIZE_XLARGE -> "Xlarge"
screenLayout and Configuration.SCREENLAYOUT_SIZE_MASK == Configuration.SCREENLAYOUT_SIZE_UNDEFINED -> "Undefined"
else -> error("Unknown screenLayout: $screenLayout")
}
}
क्या आप एक स्ट्रिंग संसाधन और एनम का उपयोग करके ऐसा नहीं कर सकते थे? आप एक स्ट्रिंग संसाधन को परिभाषित कर सकते हैं जिसमें स्क्रीन का नाम, जैसे SMALL, MEDIUM या LARGE था। तब आप एनाम की एक आवृत्ति बनाने के लिए स्ट्रिंग संसाधन के मूल्य का उपयोग कर सकते हैं।
आपके द्वारा चिन्हित किए गए विभिन्न स्क्रीन आकारों के लिए अपने कोड में एक Enum को परिभाषित करें।
public Enum ScreenSize {
SMALL,
MEDIUM,
LARGE,;
}
एक स्ट्रिंग संसाधन को परिभाषित करें, स्क्रीन करें, जिसका मूल्य या तो SMALL, MEDIUM या LARGE होगा।
<string name="screensize">MEDIUM</string>
screensize
आपके द्वारा परवाह किए गए प्रत्येक आयाम में एक स्ट्रिंग संसाधन की एक प्रति रखें । <string name="screensize">MEDIUM</string>
मानों- sw600dp / strings.xml और मान-माध्यम / strings.xml <string name="screensize">LARGE</string>
में जाएंगे और sw720dp / strings.xml और मान-बड़े / str..ml में जाएंगे।ScreenSize size = ScreenSize.valueOf(getReources().getString(R.string.screensize);
इस कोड को अपने में कॉपी और पेस्ट करें Activity
और जब इसे निष्पादित किया जाता है तो यह Toast
डिवाइस की स्क्रीन आकार श्रेणी होगी।
int screenSize = getResources().getConfiguration().screenLayout &
Configuration.SCREENLAYOUT_SIZE_MASK;
String toastMsg;
switch(screenSize) {
case Configuration.SCREENLAYOUT_SIZE_LARGE:
toastMsg = "Large screen";
break;
case Configuration.SCREENLAYOUT_SIZE_NORMAL:
toastMsg = "Normal screen";
break;
case Configuration.SCREENLAYOUT_SIZE_SMALL:
toastMsg = "Small screen";
break;
default:
toastMsg = "Screen size is neither large, normal or small";
}
Toast.makeText(this, toastMsg, Toast.LENGTH_LONG).show();