এইচডিপিআই স্ক্রিন বা এমডিপিআই স্ক্রিনটি কোনও অ্যান্ড্রয়েড ডিভাইস কীভাবে পরীক্ষা করবেন?


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
এসিলিভার

1
@ স্টেটডি কি কোনও ডিভাইস হতে চলেছে তা বলা সম্ভব? উদাহরণস্বরূপ, বালতি পরিসরের মাঝখানে ডিপিআই 140 হলে কেসটি বিবেচনা করুন? এটি নিচে বা উপরে?
ওয়াল


3
নেক্সাস 6 পি এর জন্য আমি 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;
}

সম্পাদনা এডিট সচেতন থাকুন যেহেতু অ্যান্ড্রয়েডের বিকশিত হওয়ার সাথে সাথে অন্যান্য মানগুলিও অন্তর্ভুক্ত করা উচিত switch। এই সম্পাদনা হিসাবে, এটি অন্তর্ভুক্ত DisplayMetrics.DENSITY_TVএবং DisplayMetrics.DENSITY_XXHIGH। সর্বশেষ তথ্যের জন্য ডক্সের সাথে পরামর্শ করুন ; আমি এই উত্তর বজায় রাখতে বিরক্ত করব না।


এটি SDK স্তরের 4 (প্ল্যাটফর্ম 1.6) এবং তার উপরে বিদ্যমান থাকার কথা। আপনি কোন এসডিকে স্তরটি ব্যবহার করছেন? (এসডিকে 3 তে, আপনি densityস্টিডির পরামর্শ অনুযায়ী ব্যবহার করতে পারেন ))
টেড হপ

আমি প্ল্যাটফর্ম 1.5 লক্ষ্য করতে হবে। নীচের উত্তরটি আমার অনুরোধের জন্য উপযুক্ত হতে পারে।
বিরসির

4
নীচের উত্তরটি এখন উপরের উত্তর, আরও জেনেরিক হওয়া দরকার;)
নিল

কিছু নতুন ডিভাইস (যেমন নেক্সাস 7) এর সাথে এফওয়াইআই, আপনারও DENSITY_TV অন্তর্ভুক্ত করা উচিত।
এনি

1
@ ন্যানি - ভাল কথা ধন্যবাদ। এপিআই স্তরের 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";
    }
}

তবে @ টেড পয়েন্ট হিসাবে সর্বদা ব্যবহারের আগে সরকারী দস্তাবেজের সাথে পরামর্শ করুন


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()অ্যান্ড্রয়েড সেটিংসে প্রদর্শন আকারের উপর নির্ভর করে এবং dpi এর উপর নির্ভর করে মানগুলির একটি ব্যাপ্তি ফিরে আসবে। এই মানগুলি আপনি যে সঠিক মানগুলি এড়িয়ে গেছেন তার সাথে সহাবস্থান করবে না।
এনক্রিপ্ট

0

কিছু ডিভাইসে (খনিটি গ্যালাক্সি ট্যাব 3), ঘনত্ব এবং ঘনত্ব উভয়ই ডিপিআই 1.33 (ঘনত্ব), 213 (ঘনত্ব ডিপিআই) এর মতো অদ্ভুত মানগুলি ফেরত দেয়। সুতরাং আমার সমাধান হ'ল এই পতাকাটি যুক্ত করা:

<আইটেম টাইপ = "বুল" নাম = "is_mdpi"> [bool] </item>
<আইটেম টাইপ = "বুল" নাম = "is_hdpi"> [bool] </item>
<আইটেম টাইপ = "বুল" নাম = " is_xhdpi "> [bool] </item>
<আইটেম টাইপ =" বুল "নাম =" is_xxhdpi "> [bool] </item>

4 টি মানসমূহ। এক্সএমএল ফাইলগুলিতে, এগুলি সম্পর্কিত রেজোলিউশন / মানসমূহ - [এক্সএক্সএক্সএক্স] / ফোল্ডারগুলির অধীনে রাখুন।


6
213dpi একটি সুপরিচিত ঘনত্ব, "টিভিডিপিআই": বিকাশকারী.অ্যান্ড্রয়েড.
ক্রিস্টোফার অর
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.