প্রোগ্রামিয়ালি 7 ইঞ্চি এবং 10 ইঞ্চি ট্যাবলেট সনাক্ত করুন


94

প্রোগ্রামটিমেটিকভাবে এটির কোনও উপায় আছে যা অ্যাপটি ইনস্টল করা হয়েছে তা 7 ইঞ্চি ট্যাবলেট বা 10 ইঞ্চি ট্যাবলেট?


উদাহরণস্বরূপ: লেআউট-sw600dp 600dp এর বৃহত্তম প্রস্থের আকারের সন্ধান করে।
রুকি

আমি বুঝতে পেরেছি, তবে আপনি প্রোগ্রামগতভাবে কী খুঁজছেন?
জিওবিটস

আমাকে এই ডিভাইসগুলিকে প্রোগ্রামাগুলিভাবে আনতে হবে..আমি এমন কিছু বৈশিষ্ট্য রয়েছে যা আমি এক্সএমএল দ্বারা সংজ্ঞায়িত করতে পারি না..এই বৈশিষ্ট্যগুলি কোডেই সংজ্ঞায়িত করা হয় .. সুতরাং আমি যদি কোডটি সহজভাবে রাখি তবে এটি সমস্ত ডিভাইসে প্রয়োগ হবে..কিন্তু আমি তা চাই না ..
রুকি

@ রাঘব আপনি স্ক্রিনের আকার পেতে ডিসপ্লে ম্যাট্রিক্স দিয়ে চেষ্টা করেছেন এবং তারপরে আপনি তুলনা করতে পারবেন। যদিও এটি একটি পরিষ্কার উপায় নয় তবে আপনি ব্যবহার করতে পারেন।
পীযূষমিশ্রা

আপনি আপনার স্ক্রিনের মাত্রা পেতে এবং সেখান থেকে কাজ করতে পারেন ... stackoverflow.com/questions/1016896/…
রাজ

উত্তর:


235

DisplayMetricsআপনার অ্যাপটি যে স্ক্রিনটি চলছে সে সম্পর্কে পুরো গুচ্ছ তথ্য পেতে আপনি এটি ব্যবহার করতে পারেন ।

প্রথমত, আমরা একটি DisplayMetricsমেট্রিক্স বস্তু তৈরি করি :

DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);

এটি থেকে, আমরা প্রদর্শন আকারের প্রয়োজনীয় তথ্যগুলি পেতে পারি:

int widthPixels = metrics.widthPixels;
int heightPixels = metrics.heightPixels;

এটি পিক্সেলগুলির প্রস্থের উচ্চতা এবং উচ্চতা ফিরে আসবে, সুতরাং গ্যালাক্সি এসআইআইআই, গ্যালাক্সি নেক্সাস ইত্যাদির জন্য 1280x720 will

এটি সাধারণত এটি নিজেই সহায়ক হয় না, যেমন আমরা যখন অ্যান্ড্রয়েড ডিভাইসগুলিতে কাজ করি তখন আমরা সাধারণত ঘনত্বের স্বাধীন পিক্সেল, ডিপকে কাজ করতে পছন্দ করি।

আপনি পেতে densityপর্দা ব্যবহারের metricsডিভাইস রয়েছে, যা উপর ভিত্তি করে তৈরি একটি স্কেল ফ্যাক্টর আকারে আবার, অ্যান্ড্রয়েড ডিজাইন রিসোর্স জন্য mdpi, hdpiইত্যাদি ডিপিআই স্কেল করে

float scaleFactor = metrics.density;

এই ফলাফল থেকে, আমরা নির্দিষ্ট উচ্চতা বা প্রস্থের জন্য ঘনত্বের স্বাধীন পিক্সেলের পরিমাণ গণনা করতে পারি।

float widthDp = widthPixels / scaleFactor
float heightDp = heightPixels / scaleFactor

এর থেকে প্রাপ্ত ফলাফল আপনাকে Android কনফিগারেশনের উদাহরণগুলির সাথে একত্রে কোন ধরণের স্ক্রিনের সাথে কাজ করছেন তা সিদ্ধান্ত নিতে সহায়তা করবে , যা আপনাকে প্রতিটি পর্দার আকারের জন্য আপেক্ষিক ডিপি দেয়:

  • 320 ডিপি: একটি সাধারণ ফোন স্ক্রিন (240x320 এলডিপিআই, 320x480 এমডিপিআই, 480x800 এইচডিপিআই, ইত্যাদি)।
  • 480dp: স্ট্রাইক (480x800 এমডিপিআই) এর মতো একটি টিউনার ট্যাবলেট।
  • 600 ডিপি: একটি 7 ”ট্যাবলেট (600x1024 এমডিপিআই)।
  • 720 ডিপি: একটি 10 ​​”ট্যাবলেট (720x1280 এমডিপিআই, 800x1280 এমডিপিআই, ইত্যাদি)।

উপরের তথ্য ব্যবহার করে, আমরা জানি যে ডিভাইসের ক্ষুদ্রতম প্রস্থ যদি 600dp এর চেয়ে বেশি হয় তবে ডিভাইসটি 7 "ট্যাবলেট, যদি এটি 720 ডিপি এর চেয়ে বেশি হয়, ডিভাইসটি 10" ট্যাবলেট।

আমরা ক্লাসের minফাংশনটি ব্যবহার করে ক্ষুদ্রতম প্রস্থের কাজ করতে পারি Math, পাস করে heightDpএবং widthDpফিরে আসি smallestWidth

float smallestWidth = Math.min(widthDp, heightDp);

if (smallestWidth > 720) {
    //Device is a 10" tablet
} 
else if (smallestWidth > 600) {
    //Device is a 7" tablet
}

তবে এটি আপনাকে সর্বদা একটি সঠিক মিল দেয় না, বিশেষত অস্পষ্ট ট্যাবলেটগুলির সাথে কাজ করার সময় যা তাদের ঘনত্বটিকে hdpi হিসাবে ভুলভাবে উপস্থাপন করতে পারে যখন তা না হয়, বা এটি কেবল 800 x 480 পিক্সেল এখনও 7 "স্ক্রিনে থাকতে পারে ।

এই পদ্ধতিগুলি ছাড়াও, যদি আপনাকে কখন ইঞ্চিতে কোনও ডিভাইসের সঠিক মাত্রাগুলি জানতে হয়, আপনি metricsস্ক্রিনে প্রতি ইঞ্চি কত পিক্সেল রয়েছে তার পদ্ধতিটি ব্যবহার করে এটিও কাজ করতে পারেন ।

float widthDpi = metrics.xdpi;
float heightDpi = metrics.ydpi;

ডিভাইসটি কত ইঞ্চি তা নির্ধারণ করতে আপনি প্রতিটি ইঞ্চি ডিভাইসে কত পিক্সেল এবং মোট পিক্সেলের পরিমাণ জ্ঞানটি ব্যবহার করতে পারেন।

float widthInches = widthPixels / widthDpi;
float heightInches = heightPixels / heightDpi;

এটি ডিভাইসের উচ্চতা এবং প্রস্থ ইঞ্চিতে ফিরে আসবে। এটি আবার কী ধরণের ডিভাইস তা নির্ধারণের জন্য এটি সর্বদা সহায়ক নয়, কারণ কোনও ডিভাইসের বিজ্ঞাপন দেওয়া আকারটি তির্যক হয়, আমাদের সমস্ত কিছুই উচ্চতা এবং প্রস্থ।

তবে আমরা এটিও জানি যে একটি ত্রিভুজের উচ্চতা এবং প্রস্থকে প্রদত্ত আমরা পাইপাগোরিয়ান উপপাদ্যটি অনুমানের দৈর্ঘ্যের জন্য কাজ করতে পারি (এই ক্ষেত্রে, পর্দার ত্রিভুজটির আকার)।

//a² + b² = c²

//The size of the diagonal in inches is equal to the square root of the height in inches squared plus the width in inches squared.
double diagonalInches = Math.sqrt(
    (widthInches * widthInches) 
    + (heightInches * heightInches));

এ থেকে, আমরা ডিভাইসটি ট্যাবলেট কিনা তা কার্যকর করতে পারি:

if (diagonalInches >= 10) {
    //Device is a 10" tablet
} 
else if (diagonalInches >= 7) {
    //Device is a 7" tablet
}

আপনি ঠিক কীভাবে ডিভাইসের সাথে কাজ করছেন তা গণনা করুন।


4
দুর্দান্ত টিপস শন। আমি ট্যাবলেটগুলির জন্য পিক্সের সাথে চেক করতাম, তবে কিছু ক্ষেত্রে সমস্যা আছে (গ্যালাক্সি 3, 4, দ্রষ্টব্য, নেক্সাস 7 এর চেয়ে সমান বা আরও বেশি পিএক্স আছে)। এখন আমি ইঞ্চিও পরীক্ষা করতে পারি। এখানে অনেক জনপ্রিয় ডিভাইসগুলির স্ক্রীন চশমা একটি তালিকা রয়েছে en.wikipedia.org/wiki/List_of_displays_by_pixel_density
Pelanes

8
Xdpi বা ydpi ব্যবহার করবেন না। এগুলি alচ্ছিক এবং নির্মাতার দ্বারা সেট করা হবে, গণনা করা হবে না। এগুলি প্রায়শই অব্যবহৃত বা ভুল হয়।
sturrockad

4
আপনার পদ্ধতিটি ডিপিআই-তে প্রস্থের জন্য ব্যবহার করে আমি অভিমুখের উপর নির্ভর করে বিভিন্ন ফলাফল পেয়েছি। যেমন নেক্সাস 7 এর জন্য: পোর্ট্রেট: ক্ষুদ্রতম প্রস্থ = 600.9; ল্যান্ডস্কেপ: ক্ষুদ্রতম প্রস্থ = 552.8; এর কারণ কী?
ক্রিস্টোফার মাসের

4
যুক্তি if (smallestWidth > 600) { /* 7" */ } else if (smallestWidth > 720) { /* 10" */ }ত্রুটিযুক্ত: 10 "ট্যাবলেটটি 7 হিসাবে স্বীকৃত হয়"। আমি এটা ঠিক করতে স্বাধীনতা গ্রহণ।
জোনিক

21
পরিশেষে আমি সঙ্গে গিয়েছিলাম resources.getConfiguration().smallestScreenWidthDpথেকে DeeV এর উত্তর যা শুধুমাত্র পদ্ধতি যা দেয় উভয় লম্বালম্বি এবং আড়াআড়ি মধ্যে একই মান আমার Nexus 7 (600dp) উপর। এটি এপিআই স্তরে 13 যোগ করা হয়েছে
জোনিক

32

কিছুই বলছেন 7"বা 10"আমি যতদূর জানি। বিটম্যাপ ডিকোডিং এবং হোয়াট নোট করার সময় সিস্টেম দুটি পর্দার মাত্রা পেতে প্রায় দুটি উপায় পায়। তারা উভয়ই অ্যাপ্লিকেশনটির Resourcesবস্তুটিতে পাওয়া গেছে Context

প্রথমটি হ'ল Configurationবস্তু যা দ্বারা প্রাপ্ত করা যায় getContext().getResources().getConfiguration()। এতে আপনার রয়েছে:

Configuration#densityDpi - ঘনত্বের উত্সের যোগ্যতা অনুসারে লক্ষ্য পর্দার ঘনত্বটি রেন্ডার করা হচ্ছে।

Configuration#screenHeightDp - উপলব্ধ পর্দার স্থানের বর্তমান উচ্চতা, ডিপি ইউনিটগুলিতে, পর্দার উচ্চতা সংস্থান কোয়ালিফায়ারের সাথে সম্পর্কিত।

Configuration#screenWidthDp - স্ক্রিন প্রস্থের রিসোর্স কোয়ালিফায়ারের সাথে সম্পর্কিত ডিপি ইউনিটগুলিতে উপলভ্য স্ক্রিন স্পেসের বর্তমান প্রস্থ।

Configuration#smallestScreenWidthDp - ক্ষুদ্রতম পর্দার আকারের কোনও অ্যাপ্লিকেশন সাধারণ অপারেশনে দেখতে পাবে, ক্ষুদ্রতম পর্দার প্রস্থের সংস্থান কোয়ালিফায়ারের সাথে সম্পর্কিত।

যে সঙ্গে, আপনি প্রায় কাছাকাছি পর্দা নির্দেশিকা ব্যবহার করেন আপনার ডিভাইস (নিজ নিজ বিশেষ সংস্থান ফোল্ডারগুলি থেকে pulling হয় জিনিসটা করতে hdpi, xhdpi, large, xlarge, ইত্যাদি)।

মনে রাখবেন, এগুলি কয়েকটি বালতি:

  • xlarge পর্দা কমপক্ষে 960dp x 720dp are
  • বড় স্ক্রিনগুলি কমপক্ষে 640 ডিপি এক্স 480 ডিপি হয়
  • সাধারণ পর্দা কমপক্ষে 470dp x 320dp are
  • ছোট পর্দা কমপক্ষে 426dp x 320dp are

  • 320 ডিপি: একটি সাধারণ ফোন স্ক্রিন (240x320 এলডিপিআই, 320x480 এমডিপিআই, 480x800 এইচডিপিআই, ইত্যাদি)।

  • 480dp: স্ট্রাইক (480x800 এমডিপিআই) এর মতো একটি টিউনার ট্যাবলেট।
  • 600 ডিপি: একটি 7 ”ট্যাবলেট (600x1024 এমডিপিআই)।
  • 720 ডিপি: একটি 10 ​​”ট্যাবলেট (720x1280 এমডিপিআই, 800x1280 এমডিপিআই, ইত্যাদি)।

অধিক তথ্য

দ্বিতীয়টি হল DisplayMetricsপ্রাপ্ত বস্তু getContext().getResources().getDisplayMetrics()। এতে আপনার রয়েছে:

DisplayMetrics#density - প্রদর্শনটির যৌক্তিক ঘনত্ব।

DisplayMetrics#densityDpi - স্ক্রিন ঘনত্ব প্রতি ইঞ্চি বিন্দু হিসাবে প্রকাশিত।

DisplayMetrics#heightPixels - পিক্সেল ডিসপ্লে এর পরম উচ্চতা।

DisplayMetrics#widthPixels - পিক্সেল ডিসপ্লে এর পরম প্রস্থ।

DisplayMetrics#xdpi - এক্স মাত্রায় স্ক্রিনের প্রতি ইঞ্চি প্রকৃত শারীরিক পিক্সেল।

DisplayMetrics#ydpi - ওয়াই ডাইমেনশনে স্ক্রিনের প্রতি ইঞ্চি অবিকল শারীরিক পিক্সেল।

ঘনত্বের পরিবর্তে আপনার পর্দার সঠিক পিক্সেল গণনা প্রয়োজন হলে এটি সুবিধাজনক। তবে এটি লক্ষ্য করা গুরুত্বপূর্ণ যে এটি সমস্ত পর্দার পিক্সেল। আপনার কাছে কেবল উপলভ্য নয়।


4
+1, আমি সেরা ফলাফল পাচ্ছি smallestScreenWidthDp। অন্যান্য সমাধানগুলির বিপরীতে , ওরিয়েন্টেশন নির্বিশেষে এটি আমার নেক্সাস 7 (600 ডিপি) এ একই মান দেয় । বোনাস হিসাবে এটিও সহজতম কোড!
জোনিক

4
আমি এই কারণ এটি সবচেয়ে ভালো উপায় হতে চলতে মনে করা উচিত নয় রিসোর্স পাথ উপর SW ??? ডিপি স্বরলিপি সঙ্গে মেলে না। ধারাবাহিকতা গুরুত্বপূর্ণ।
লিলবির্ডি

13

এই পদ্ধতিটি onResume () এ রাখুন এবং চেক করতে পারেন।

public double tabletSize() {

     double size = 0;
        try {

            // Compute screen size

            DisplayMetrics dm = context.getResources().getDisplayMetrics();

            float screenWidth  = dm.widthPixels / dm.xdpi;

            float screenHeight = dm.heightPixels / dm.ydpi;

            size = Math.sqrt(Math.pow(screenWidth, 2) +

                                 Math.pow(screenHeight, 2));

        } catch(Throwable t) {

        }

        return size;

    }

সাধারণত ট্যাবলেটগুলি 6 ইঞ্চি আকারের পরে শুরু হয়।


8

উপরের চিত্রগুলি বনাম ল্যান্ডস্কেপ স্যুইচ করার সময় সবসময় কাজ করে না।

যদি আপনি এপিআই স্তর 13+ টার্গেট করে থাকেন তবে উপরে বর্ণিত হিসাবে এটি সহজ Config

resources.getConfiguration().smallestScreenWidthDp

অন্যথায়, যদি আপনি এটি সামর্থ্য করতে পারেন তবে সিস্টেমটি আপনাকে বলতে দিয়ে 600dp (6% এর মতো) বনাম 720 ডিপি (10 এর মতো) সনাক্ত করার জন্য নীচের পদ্ধতিটি ব্যবহার করুন যা খুব সঠিক পদ্ধতি is

1) লেআউট-sw600dp এবং লেআউট-sw720dp যুক্ত করুন (এবং যদি এর ল্যান্ডস্কেপ প্রযোজ্য হয়) উপযুক্ত আইডি সহ একটি অদৃশ্য দৃশ্য, উদাহরণস্বরূপ:

লেআউট- sw720dp- এ 720 এর জন্য:

<View android:id="@+id/sw720" android:layout_width="0dp" android:layout_height="0dp" android:visibility="gone"/>

600 এর জন্য, লেআউট-sw600dp তে:

<View android:id="@+id/sw600" android:layout_width="0dp" android:layout_height="0dp" android:visibility="gone"/>

2) তারপরে কোডে, উদাহরণস্বরূপ, ক্রিয়াকলাপ, সেই অনুযায়ী পরীক্ষা করুন:

private void showFragment() {
    View v600 = (View) findViewById(R.id.sw600);
    View v720 = (View) findViewById(R.id.sw720);
    if (v600 != null || v720 !=null)
        albumFrag = AlbumGridViewFragment.newInstance(albumRefresh);
    else
        albumFrag = AlbumListViewFragment.newInstance(albumRefresh);
    getSupportFragmentManager()
        .beginTransaction()
        .replace(R.id.view_container, albumFrag)
        .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE)
        .commit();
}

4
আপনার একটি পৃথক বিন্যাস তৈরি করার দরকার নেই, আমি বিশ্বাস করি যে আকারের উপর ভিত্তি করে আলাদা আলাদা স্ট্রিংস.এমএমএল থাকতে পারে, মান-sw600dp ইত্যাদির মতো বিভিন্ন মান ফোল্ডার থাকা ইত্যাদি দ্বারা একটি স্ট্রিং <স্ট্রিং নাম = 'স্ক্রিনসাইজ' সংজ্ঞায়িত করা উচিত > 600dp </string> sw600dp ফোল্ডারে ইত্যাদি etc.
ajacian81

7

দুর্দান্ত তথ্য, আমি যা খুঁজছিলাম! তবে এটি চেষ্টা করে দেখতে পেলাম যে এখানে বর্ণিত ম্যাট্রিকগুলি ব্যবহার করার সময় নেক্সাস 7 (2012 মডেল) এর 1280x736 মাত্রা রয়েছে বলে প্রতিবেদন করেছে। আমার কাছে একটি মটোরোলা জুম চলছে জেলি বিন এবং এটি ভুলভাবে 1280x752 এর রেজোলিউশনের রিপোর্ট করে। আমি এখানে এই পোস্টে হোঁচট খেয়েছি যা এটির সত্যতা নিশ্চিত করে। মূলত, আইসিএস / জেবিতে উপরে উল্লিখিত মেট্রিকগুলি ব্যবহার করে গণনাগুলি নেভিগেশন বারের মাত্রা বাদ দেয় বলে মনে হয়। আরও কিছু গবেষণা আমাকে এখানে ফ্রাঙ্ক এনগুইনের উত্তরের দিকে নিয়ে গিয়েছিল যা বিভিন্ন পদ্ধতি ব্যবহার করে যা আপনাকে পর্দার কাঁচা (বা বাস্তব) পিক্সেল মাত্রা দেয়। আমার প্রাথমিক পরীক্ষায় দেখা গেছে যে ফ্রাঙ্ক ক্যারক্লিটি থেকে নিম্নলিখিত কোডগুলি নেক্সাস 7 (2012 মডেল রনিন জেবি) এবং আমার মটোরোলা জুম চলমান জেবিতে মাত্রা সম্পর্কে রিপোর্ট করেছে:

int width = 0, height = 0;
final DisplayMetrics metrics = new DisplayMetrics();
Display display = getWindowManager().getDefaultDisplay();
Method mGetRawH = null, mGetRawW = null;

try {
    // For JellyBeans and onward
    if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.JELLY_BEAN) {
        display.getRealMetrics(metrics);

        width = metrics.widthPixels;
        height = metrics.heightPixels;
    } else {
        mGetRawH = Display.class.getMethod("getRawHeight");
        mGetRawW = Display.class.getMethod("getRawWidth");

        try {
            width = (Integer) mGetRawW.invoke(display);
            height = (Integer) mGetRawH.invoke(display);
        } catch (IllegalArgumentException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
} catch (NoSuchMethodException e3) {
    e3.printStackTrace();
}

3

আমার একই রেজোলিউশন সহ দুটি অ্যান্ড্রয়েড ডিভাইস রয়েছে

ডিভাইস 1 -> রেজোলিউশন 480x800 তির্যক পর্দার আকার -> 4.7 ইঞ্চি

ডিভাইস 2 -> রেজোলিউশন 480x800 তির্যক পর্দার আকার -> 4.0 ইঞ্চি

এটি উভয় ডিভাইসের তির্যক পর্দার আকার -> 5.8 দেয়

আপনার সমস্যার সমাধান হ'ল ..

DisplayMetrics dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
int width=dm.widthPixels;
int height=dm.heightPixels;
int dens=dm.densityDpi;
double wi=(double)width/(double)dens;
double hi=(double)height/(double)dens;
double x = Math.pow(wi,2);
double y = Math.pow(hi,2);
double screenInches = Math.sqrt(x+y);

দেখতে বিবরণ এখানে ..


2

এগুলি অ্যান্ড্রয়েড স্ক্রিনের মাপ নির্দিষ্ট করে চারটি সাধারণ আকারের মাধ্যমে: ছোট , সাধারণ , বড় এবং এক্সলারেজ

যদিও অ্যান্ড্রয়েড ডকুমেন্টেশনে উল্লেখ করা হয়েছে যে আকারের গ্রুপগুলি হ্রাস করা হয়েছে

... উপলব্ধ আকারের স্ক্রিনের প্রস্থের উপর ভিত্তি করে এই আকারের গোষ্ঠীগুলি স্ক্রিন মাপ পরিচালনার জন্য একটি নতুন প্রযুক্তির পক্ষে অবহেলা করা হয়েছে। যদি আপনি অ্যান্ড্রয়েড ৩.২ এবং আরও বেশি বিকাশের জন্য বিকাশ করছেন তবে আরও তথ্যের জন্য [অ্যান্ড্রয়েড ৩.২ এর জন্য ট্যাবলেট লেআউটগুলি ঘোষণা করে] দেখুন (এইচডিপিআই (উচ্চ) ~ 240 ডিপিআই)

সাধারণত আকারের কোয়ালিফায়ার বৃহত একটি 7 "ট্যাবলেট নির্দিষ্ট করে x এবং xlarge এর একটি আকারের বাছাইকারী একটি 10" ট্যাবলেট নির্দিষ্ট করে:

এখানে চিত্র বর্ণনা লিখুন

সাইজ কোয়ালিফায়ারকে ট্রিগার করার চমৎকার জিনিসটি হ'ল আপনি গ্যারান্টি দিতে পারবেন যে আপনার সম্পদ এবং কোড চুক্তিতে সই হয়েছে যার ভিত্তিতে সম্পদ ব্যবহার করতে হবে বা কোডটি সক্রিয় করতে হবে।

কোডের আকারের কোয়ালিফায়ার পুনরুদ্ধার করতে নিম্নলিখিত কলগুলি করুন:

int sizeLarge = SCREENLAYOUT_SIZE_LARGE // For 7" tablet
boolean is7InchTablet = context.getResources().getConfiguration()
    .isLayoutSizeAtLeast(sizeLarge);

int sizeXLarge = SCREENLAYOUT_SIZE_XLARGE // For 10" tablet
boolean is10InchTablet = context.getResources().getConfiguration()
    .isLayoutSizeAtLeast(sizeXLarge);

2

আপনি স্ক্রিনের আকারটি ইঞ্চি আকারে পেতে নীচের পদ্ধতিটি ব্যবহার করতে পারেন, তার ভিত্তিতে কেবল ডিভাইসটি কোন ট্যাবলেট বা ফোন রয়েছে তা পরীক্ষা করে দেখতে পারেন।

private static double checkDimension(Context context) {

    WindowManager windowManager = ((Activity)context).getWindowManager();
    Display display = windowManager.getDefaultDisplay();
    DisplayMetrics displayMetrics = new DisplayMetrics();
    display.getMetrics(displayMetrics);

    // since SDK_INT = 1;
    int mWidthPixels = displayMetrics.widthPixels;
    int mHeightPixels = displayMetrics.heightPixels;

    // includes window decorations (statusbar bar/menu bar)
    try
    {
        Point realSize = new Point();
        Display.class.getMethod("getRealSize", Point.class).invoke(display, realSize);
        mWidthPixels = realSize.x;
        mHeightPixels = realSize.y;
    }
    catch (Exception ignored) {}

    DisplayMetrics dm = new DisplayMetrics();
    windowManager.getDefaultDisplay().getMetrics(dm);
    double x = Math.pow(mWidthPixels/dm.xdpi,2);
    double y = Math.pow(mHeightPixels/dm.ydpi,2);
    double screenInches = Math.sqrt(x+y);
    Log.d("debug","Screen inches : " + screenInches);
    return screenInches;
}

2

আমি মান ফোল্ডারে একটি মান সঞ্চয় করছিলাম যা আমাকে স্ক্রিনটি 7 ইঞ্চি বা 10 ইনক দেয় তবে আমরা মান ফোল্ডার ব্যবহার করে যে কোনও ডিভাইসের জন্য এটি করতে পারি।

বিভিন্ন -2 ডিভাইসের জন্য আলাদা -2 মান ফোল্ডার তৈরি করা পছন্দ করে। তবে এই জিনিসটি প্রয়োজনের উপর নির্ভর করে।


1

আপনাকে ডিসপ্লেমেট্রিক্স ক্লাসের দেওয়া ডেটা ব্যবহার করে কিছুটা গণনা করতে হবে ।

আপনার উচ্চতাপিক্সেল এবং প্রস্থ পিক্সেল রয়েছে (পিক্সেলের পর্দার সমাধান)

'ইঞ্চি স্ক্রিনের আকার' সর্বদা তির্যক দৈর্ঘ্যের বর্ণনা দেয় বলে আপনার তির্যক প্রয়োজন। আপনি পিক্সেল স্ক্রিনের কর্ণ পেতে পারেন (পাইথাগোর ব্যবহার করে)

ডায়াগোনালপিক্সেল = √ (উচ্চতাপিক্সেল² + প্রস্থপিক্সেল²)

তারপরে আপনি পিক্সেল মানটিকে ঘনত্বের জন্য মূল্য ইঞ্চিতে রূপান্তর করতে পারবেন:

ইঞ্চিডিয়াগ = ডায়াগোনালপিক্সেল / ঘনত্বপিডিআই I

আমি আশা করি আমি এখানে ভুল করি নি, সচেতন থাকুন যে আপনি ডিসপ্লেমেট্রিক্স ক্লাস থেকে প্রাপ্ত মানগুলি নির্মাণকারীর দ্বারা দেওয়া হয়েছে, এটি উপস্থিত হয় (খুব বিরল ক্ষেত্রে) যে শারীরিক উপাদান অনুসারে সেগুলি ভালভাবে সেট করা যায় না ...

এটি আপনাকে দৈহিক স্ক্রিনের আকার দেবে তবে একাধিক লেআউট পরিচালনা করার পক্ষে এটি সম্ভবত সেরা উপায় নয়। এই বিষয়ে আরও


1

অন্য উপায়:

  • আরও 2 টি ফোল্ডার তৈরি করুন: মান-বৃহত + মান-এক্সলারেজ

  • রাখুন: <string name="screentype">LARGE</string>মান-বৃহত ফোল্ডারে (স্ট্রিং.এক্সএমএল)

  • রাখুন: <string name="screentype">XLARGE</string>মানগুলিতে- এক্সরেজ ফোল্ডারে (স্ট্রিং.এক্সএমএল)

  • কোডে:

    স্ট্রিং এমটাইপ = getString (R.string.screentype);

    যদি (এমটাইপ! = নাল && mType.equals ("LARGE")

    // 4 ~ 7 ইঞ্চি থেকে

    } অন্যথায় যদি (এমটাইপ! = নাল &&MType.equals ("XLARGE") {

    // 7 ~ 10 ইঞ্চি থেকে

    }


1

ভয়েলা! Phones ফোনগুলি থেকে ট্যাবলেটগুলি আলাদা করার জন্য আপনাকে এগুলি করতে হবে

1. পর্দার প্রস্থ পেতে সহায়ক ফাংশন:

private float getScreenWidth() {
    DisplayMetrics metrics = new DisplayMetrics();
    getWindowManager().getDefaultDisplay().getMetrics(metrics);
    return Math.min(metrics.widthPixels, metrics.heightPixels) / metrics.density;
}

২. কোনও ডিভাইস ট্যাবলেট কিনা তা খুঁজে বের করার কাজ

boolean isTablet() {
    return getScreenWidth() >= 600;
}

৩. অবশেষে, আপনি যদি বিভিন্ন ডিভাইসের আকারের জন্য বিভিন্ন ক্রিয়াকলাপটি সন্ধান করছেন:

boolean is7InchTablet() {
    return getScreenWidth() >= 600 && getScreenWidth() < 720;
}

boolean is10InchTablet() {
    return getScreenWidth() >= 720;
}

0

এখানে কিছু দরকারী কোটলিন এক্সটেনশান:


    fun DisplayMetrics.isTablet(): Boolean {
        return screenWith() >= 600
    }

    fun DisplayMetrics.is7InchTablet(): Boolean {
        return screenWith() >= 600 && screenWith() < 720
    }

    fun DisplayMetrics.is10InchTablet(): Boolean {
        return screenWith() >= 720
    }

    fun DisplayMetrics.screenWith(): Float {
        return widthPixels.coerceAtMost(heightPixels) / density
    }


ওই কাজগুলো! কিন্তু আপনার কাছ থেকে সঠিক DisplayMetrics, উদাহরণস্বরূপ ব্যবহার করা উচিত Resourcesমধ্যে Context: resources.displayMetrics.isTablet() বা থেকে WindowManagerযা সঞ্চিত Activity: val displayMetrics = DisplayMetrics() windowManager.defaultDisplay.getMetrics(displayMetrics) displayMetrics.isTablet()
Akbolat এসএসএস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.