কোড ব্যবহার করে কীভাবে ডিভাইসের স্ক্রিন আকারের বিভাগ (ছোট, সাধারণ, বড়, এক্সলারেজ) নির্ধারণ করবেন?


308

ছোট, সাধারণ, বড়, এক্সলারেজের মতো বর্তমান ডিভাইসের স্ক্রিন আকারের বিভাগ নির্ধারণের কোনও উপায় আছে কি?

ঘনত্ব নয়, তবে পর্দার আকার।

উত্তর:


420

আপনি Configuration.screenLayoutবিটমাস্ক ব্যবহার করতে পারেন ।

উদাহরণ:

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

}

31
এক্স-বৃহত সনাক্তকরণ পেতে, নিশ্চিত হয়ে নিন যে আপনি আপনার প্রকল্পে লক্ষ্য অ্যান্ড্রয়েড -৩.০ ব্যবহার করেছেন। অথবা এক্স-লার্জের জন্য স্থির মান 4 ব্যবহার করুন।
পিটারডকে

5
কিছু ডিভাইসের স্ক্রিনের একটি UNDEFINED আকার থাকতে পারে তাই কনফিগারেশনের সাথেও এটি পরীক্ষা করে নেওয়া কার্যকর SSCREENLAYOUT_SIZE_UNDEFINED।
valerybodak

আপনি কি বড় = বড় স্ক্রিন পেতে> ব্যবহার করতে পারবেন?
অ্যান্ড্রু এস

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

টোস্টটি ডিভিংয়ের জন্য দুর্দান্ত।
MinceMan

কেউ অতিরিক্ত-বড় নিশ্চিত করতে পারেন?
নাথান এইচ

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ক্লাসের ধ্রুবকগুলিকে উল্লেখ করতে পারেন । এগুলি স্থিতিশীল চূড়ান্ত মান যা সংকলনের সময় অন্তর্ভুক্ত করা হবে (এটি তাদের প্রকৃত মান দ্বারা প্রতিস্থাপিত হবে), সুতরাং আপনার কোডটি প্ল্যাটফর্মের পুরানো সংস্করণগুলিতে ভঙ্গ হবে না।
করাকুরি

ভাল লাগল আমি তা জানতাম না ... আপনি কি অ্যান্ড্রয়েডের কথা বলছেন: টার্গেটএসডিপি ভার্সন?
এ। ম্যাসন

1
হ্যাঁ, আপনি কীভাবে কোনও নির্দিষ্ট সংস্করণটিকে লক্ষ্য করবেন। বেশিরভাগ লোক (কমপক্ষে যা আমি দেখেছি) targetSdkVersionসর্বশেষ প্রকাশে তাদের সেট করে ।
করাকুরি

9

যদি আপনি সহজেই অ্যান্ড্রয়েড ডিভাইসের স্ক্রিনের ঘনত্ব এবং আকার জানতে চান তবে আপনি এই নিখরচায় অ্যাপ্লিকেশনটি ব্যবহার করতে পারেন (কোনও অনুমতি প্রয়োজন নেই): https://market.android.com/details?id=com.jotabout.screeninfo


3
এই প্রশ্নটি কোনও নির্দিষ্ট ডিভাইস সম্পর্কে নয়, এটি একাধিক ডিভাইস প্রোফাইলের জন্য প্রোগ্রামিং সম্পর্কে (যা মোবাইল প্ল্যাটফর্মগুলির জন্য বিকাশকালে একটি গুরুত্বপূর্ণ সফ্টওয়্যার বিকাশ প্রক্রিয়া)।
এমটিমুরডক

1
জানার জন্য ভাল অ্যাপটি বাজারে উপলভ্য - অ্যাপটি যে তথ্যটি ব্যবহার করে তার তথ্যটি ব্যবহার করে তা ব্যবহার করে দেখতে খুব সুন্দর হবে
স্ট্যান কুর্দিজিল

4
@ স্ট্যানকুরডিজিল সোর্স কোডটি এমআইটি ওপেন-সোর্স লাইসেন্সের আওতায় প্রকাশিত এবং এটিতে
mmathieum

এই লিঙ্কটি এখন মারা গেছে
ভাদিম কোতোভ

5

এক্সরেজ স্ক্রিন এবং এক্স..উচ্চ ঘনত্বের জন্য পরীক্ষা করা দরকার? এটি নির্বাচিত উত্তর থেকে পরিবর্তিত কোড।

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

[ঘনত্ব] এই ক্ষেত্রে আপনার ক্রিয়াকলাপে থাকা দরকার। আপনি যদি বাইরে থাকেন তবে উইন্ডো ম্যানেজার () এই কোডটি উইন্ডোম্যানেজার উইন্ডো ম্যানেজার = (উইন্ডো ম্যানেজার) প্রসঙ্গ।
horkavlna

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

এই ফাংশনটি লেআউটসাইজএলটিস্ট ব্যবহার করুন (স্ক্রিন সাইজ)

ছোট স্ক্রিনটি পরীক্ষা করতে, কমপক্ষে 320x426 ডিপি এবং উপরে রেটসোর্সগুলি () get get get

সাধারণ স্ক্রিনটি পরীক্ষা করতে, কমপক্ষে 320x470 ডিপি এবং উপরে রাইসোর্সগুলি () C

বড় স্ক্রিনটি চেক করতে, কমপক্ষে 480x640 ডিপি এবং উপরে রাইসোর্সগুলি () get

অতিরিক্ত বড় স্ক্রিনটি পরীক্ষা করতে, কমপক্ষে 720x960 ডিপি এবং উপরের getRes્રોসগুলি () get


নিস! সেই পদ্ধতিটি এপিআই স্তরের ১১ হিসাবেও উপলব্ধ!
এনসেলিক

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

আপনি কি স্ট্রিং রিসোর্স এবং এনামগুলি ব্যবহার করে এটি করতে পারবেন না? আপনি একটি স্ট্রিং রিসোর্সটি সংজ্ঞায়িত করতে পারেন যার স্ক্রিন আকারের নাম ছিল যেমন ছোট, মিডিয়াম বা বড়। তারপরে এনামের উদাহরণ তৈরি করতে আপনি স্ট্রিং রিসোর্সের মানটি ব্যবহার করতে পারেন।

  1. আপনার যত্ন নেওয়া বিভিন্ন স্ক্রিন আকারের জন্য আপনার কোডে একটি এনাম সংজ্ঞা দিন।

    public Enum ScreenSize {
        SMALL,
        MEDIUM,
        LARGE,;
    }
  2. একটি স্ট্রিং রিসোর্স সংজ্ঞায়িত করুন, স্ক্রীনসাইজ বলুন, যার মান হয় ছোট, মিডিয়াম বা লার্জ either

    <string name="screensize">MEDIUM</string>
  3. screensizeআপনার যত্নশীল প্রতিটি মাত্রায় একটি স্ট্রিং রিসোর্সে একটি অনুলিপি রাখুন ।
    উদাহরণস্বরূপ, <string name="screensize">MEDIUM</string>মান-sw600dp / strings.xml এবং মান-মাঝারি / <string name="screensize">LARGE</string>স্ট্রিং.এক্সএমএল যেতে হবে এবং sw720dp / strings.xml এবং মান-বৃহত / স্ট্রিং.এক্সএমএল যেতে হবে।
  4. কোড ইন, লিখুন
    ScreenSize size = ScreenSize.valueOf(getReources().getString(R.string.screensize);

এটি আশাব্যঞ্জক ছিল ... তবে আমি 3 টি ডিভাইস দিয়ে পরীক্ষা করেছি এবং যখন আমি বড় প্রত্যাশা করি তখন ট্যাবলেটটি ছোট হয়ে ফিরে আসে। আমার স্ট্রিং.এক্সএমএল ফাইলগুলি মান-h1024dp, মান-h700dp এবং মান-h200dp এর সাথে সম্পর্কিত <স্ট্রিং নাম = "স্ক্রীনাইজ"> এক্সএক্সএক্সএক্সএক্সএক্স </ স্ট্রিং> এর সাথে সংজ্ঞায়িত করা হয়েছে
এ ম্যাসন

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();
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.