कोड का उपयोग करके डिवाइस स्क्रीन आकार श्रेणी (छोटा, सामान्य, बड़ा, बड़ा) का निर्धारण कैसे करें?


308

क्या वर्तमान डिवाइस के स्क्रीन आकार की श्रेणी को निर्धारित करने का कोई तरीका है, जैसे कि छोटा, सामान्य, बड़ा, बड़ा?

घनत्व नहीं, बल्कि स्क्रीन आकार।

जवाबों:


420

आप Configuration.screenLayoutबिटमास्क का उपयोग कर सकते हैं ।

उदाहरण:

if ((getResources().getConfiguration().screenLayout & 
    Configuration.SCREENLAYOUT_SIZE_MASK) == 
        Configuration.SCREENLAYOUT_SIZE_LARGE) {
    // on a large screen device ...

}

31
X- बड़ी पहचान प्राप्त करने के लिए, सुनिश्चित करें कि आप अपने प्रोजेक्ट में लक्ष्य Android-3.0 का उपयोग करते हैं। या x- बड़े के लिए स्थैतिक मान 4 का उपयोग करें।
पीटरडक

5
कुछ उपकरणों में स्क्रीन का आकार अलग हो सकता है, इसलिए यह विन्यास के साथ उपयोगी भी हो सकता है। CREENLAYOUT_SIZE_UNDEFINED।
वल्लरीबोडक

क्या आप बड़ी स्क्रीन या अधिक स्क्रीन पाने के लिए> = का उपयोग कर सकते हैं?
एंड्रयू एस

150

नीचे दिया गया कोड ऊपर दिए गए उत्तर को मिटा देता है, स्क्रीन आकार को टोस्ट के रूप में प्रदर्शित करता है ।

//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();
}

टोस्ट डाइविंग के लिए अच्छा है।
मिन्समैन

क्या कोई अतिरिक्त-बड़े की पुष्टि कर सकता है?
नाथन एच।

68

एक स्थिर सहायक विधि के रूप में जेफ गिलफेल्ट का जवाब:

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";
    }
}

12
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
यह स्क्रीन का घनत्व प्राप्त करता है। प्रश्न निर्दिष्ट करता है "घनत्व नहीं, बल्कि स्क्रीन आकार।"
सुबारू ताशीरो

11

ऊपर दिए गए उत्तर के लिए धन्यवाद, जिसने मुझे बहुत मदद की :-) लेकिन उन (मेरे जैसे) के लिए अभी भी एंड्रॉइड 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
    ...
}

2
आप मंच के नवीनतम संस्करण को लक्षित कर सकते हैं और Configurationकक्षा से स्थिरांक का संदर्भ ले सकते हैं । ये स्थिर अंतिम मान हैं जो संकलन समय पर (जो कि उनके वास्तविक मूल्यों द्वारा प्रतिस्थापित किए जाएंगे) इनलेट किए जाएंगे, इसलिए आपका कोड प्लेटफ़ॉर्म के पुराने संस्करणों पर नहीं टूटेगा।
काराकुरी

अच्छा मुझे नहीं पता था कि ... क्या आप Android के बारे में बात कर रहे हैं: targetSdkVersion?
ए मासोन

1
हां, कि आप किसी विशेष संस्करण को कैसे लक्षित करेंगे। अधिकांश लोगों ने (कम से कम जो मैंने देखा है) targetSdkVersionउन्हें नवीनतम रिलीज़ पर सेट किया ।
कराकुरी

9

यदि आप किसी Android डिवाइस के स्क्रीन घनत्व और आकार को आसानी से जानना चाहते हैं, तो आप इस निःशुल्क एप्लिकेशन (कोई अनुमति की आवश्यकता नहीं) का उपयोग कर सकते हैं: https://market.android.com/details?id=com.jotabout.screeninfo


3
यह प्रश्न एक विशिष्ट डिवाइस के बारे में नहीं है, इसके बारे में कई दिव्य प्रोफाइल के लिए प्रोग्रामिंग के बारे में है (जो मोबाइल प्लेटफॉर्म के लिए विकसित करते समय एक महत्वपूर्ण सॉफ्टवेयर विकास प्रक्रिया है)।
mtmurdock

1
जानने के लिए अच्छा ऐप बाजार में उपलब्ध है - ऐप को देखने के लिए ऐप का उपयोग करना अच्छा होगा, यह जानकारी के साथ है
स्टेन कुर्दिज़ल

4
@StanKurdziel स्रोत कोड MIT के ओपन-सोर्स लाइसेंस के तहत प्रकाशित किया गया है और यहाँ उपलब्ध है: github.com/mportuesisf/ScreenInfo
mmathieum

यह लिंक अब मृत है
वादिम कोटोव

5

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();
}

[घनत्व] इस मामले में आपको गतिविधि में होना चाहिए। यदि आप बाहरी उपयोग कर रहे हैं तो getWindowManager () यह कोड WindowManager windowManager = (WindowManager) संदर्भ .getSystemService (Context.WINDOW_SERVICE);
14

3

यहाँ टॉम मैकफर्लिन के जवाब का एक एक्समरीन.एन्ड्रॉयड संस्करण है

        //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 ();
        }

2
कृपया कुछ कोड डंप न करें, लेकिन समझाएं कि आपने क्या किया है और यह कैसे मदद करता है
डेविड मेडेनजैक

2

इस फ़ंक्शन को आज़माएं 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);


अच्छा! यह विधि एपीआई स्तर 11 के साथ-साथ प्रारंभिक रूप में उपलब्ध है!
एनसेलेक

2

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")
    }
  }

1

क्या आप एक स्ट्रिंग संसाधन और एनम का उपयोग करके ऐसा नहीं कर सकते थे? आप एक स्ट्रिंग संसाधन को परिभाषित कर सकते हैं जिसमें स्क्रीन का नाम, जैसे SMALL, MEDIUM या LARGE था। तब आप एनाम की एक आवृत्ति बनाने के लिए स्ट्रिंग संसाधन के मूल्य का उपयोग कर सकते हैं।

  1. आपके द्वारा चिन्हित किए गए विभिन्न स्क्रीन आकारों के लिए अपने कोड में एक Enum को परिभाषित करें।

    public Enum ScreenSize {
        SMALL,
        MEDIUM,
        LARGE,;
    }
  2. एक स्ट्रिंग संसाधन को परिभाषित करें, स्क्रीन करें, जिसका मूल्य या तो SMALL, MEDIUM या LARGE होगा।

    <string name="screensize">MEDIUM</string>
  3. screensizeआपके द्वारा परवाह किए गए प्रत्येक आयाम में एक स्ट्रिंग संसाधन की एक प्रति रखें ।
    उदाहरण के लिए,<string name="screensize">MEDIUM</string> मानों- sw600dp / strings.xml और मान-माध्यम / strings.xml <string name="screensize">LARGE</string>में जाएंगे और sw720dp / strings.xml और मान-बड़े / str..ml में जाएंगे।
  4. कोड में, लिखें
    ScreenSize size = ScreenSize.valueOf(getReources().getString(R.string.screensize);

यह आशाजनक था ... हालांकि मैंने 3 उपकरणों के साथ परीक्षण किया है और टैबलेट अभी भी लघु लौट रहा है जब मैं लार्गे की उम्मीद कर रहा हूं। मेरी string.xml फाइलें मान-h1024dp, मान-h700dp और मान-h200dp के साथ इसी <string name = "स्क्रीनसेज़"> xxxxxx </ string>
A. Masson

1

इस कोड को अपने में कॉपी और पेस्ट करें 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();
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.