টাচ ইভেন্টগুলি ব্যবহার করা ইউনিটগুলিতে এবং পরিমাপ / বিন্যাস দেখুন কীভাবে আমি আমার স্ক্রিনের আকার প্রোগ্রামটিমে খুঁজে পেতে পারি? অন্য কথায়, আমি স্ক্রিনের নীচে-ডান কোণার স্থানাঙ্কগুলি, টাচ ইভেন্টগুলি ব্যবহার করা স্থানাঙ্ক ব্যবস্থায় '
getRawX()/getRawY()এবং View.getLocationOnScreen()।
আমি পছন্দসই ইভেন্ট / ভিউ ইউনিটগুলিকে "পিক্সেল" বলতে দ্বিধায় রয়েছি যেহেতু স্পষ্টতই বিভিন্ন ফোনে আমার ফোনে "পিক্সেল" এর বিভিন্ন ধারণা রয়েছে এবং তারা একটি ধারাবাহিক গল্প জুড়ে দিচ্ছে না।
আমি এই জিজ্ঞাসা করা হয়েছে এবং Stackoverflow উপর এবং অন্যত্র অনেক বললেন, কিন্তু দেখতে কেউ উত্তর আমার ফোনে আসলে কাজের (4 Droid, 4.1.2 Android) সব মোড মধ্যে:
- আমি কী অ্যান্ড্রয়েড অ্যাপ্লিকেশনটিতে প্রোগ্রামের মতো পর্দার প্রস্থ খুঁজে পেতে পারি?
- অ্যান্ড্রয়েডে আমি কীভাবে স্ক্রিন সাইজ করব program
- অ্যান্ড্রয়েড সেট স্ক্রিন আকারের উপর ভিত্তি করে দৃশ্যমানতার দৃশ্যমানতা দেখুন
- আমি কীভাবে অ্যান্ড্রয়েডে পর্দার উচ্চতা পেতে পারি?
- অ্যান্ড্রয়েডে পর্দার উচ্চতা পান
- https://groups.google.com/forum/#!topic/android-developers/IpxnfvDFrpc
- http://shuklaxyz.blogspot.com/2012/02/how-to-programmatically-figure-out.html
- http://coderock.net/how-to-determine-screen-resolution-programmatically/
- http://www.codeproject.com/Tips/313848/Get-actual-screen-size-for-the-application-layout
- অ্যান্ড্রয়েড এবং প্রস্থ এবং উচ্চতা প্রোগ্রামিংভাবে ডিপি ইউনিটে সেট করে
- http://www.simplecodestuffs.com/how-to-get-screen-dimensions-programmatically-in-android/
- http://www.androidsnippets.com/get-size-and-orientation-of-the-screen
- http://grokbase.com/t/gg/android-developers/127aatfqb6/how-to-determine-screen-resolution-programmatically
(কি দারুন!)
এটি লাইব্রেরি কোডের জন্য যা অ্যাপ্লিকেশনটি "স্ক্রিনের সামঞ্জস্যতা মোডে" (অর্থাত্ টার্গেটএসডিপি ভার্সন <= 10 ম্যানিফেস্টে) আছে কিনা তা বিবেচনা করেই কাজ করা দরকার এবং আমি অবস্থান, আকার সম্পর্কে কোনও অনুমানও করতে চাই না , বা স্ট্যাটাস বার বা অন্য কোনও অনুরূপ স্ক্রিন সজ্জায় অস্তিত্ব।
এখানে তথ্যগুলি:
আমার ফোনে (একটি অ্যান্ড্রয়েড 4 চলমান অ্যান্ড্রয়েড 4.1.2) এর 540x960 শারীরিক পিক্সেল রয়েছে, অর্থাত্ সামান্য রঙিন আলোকিত বিন্দু।
অ্যাপ্লিকেশনটি স্ক্রিনের কম্প্যাট মোডে না থাকাকালীন অ্যাপ্লিকেশনটি স্ক্রিনের কম্প্যাট মোডে থাকা অবস্থায় টাচ ইভেন্টগুলি এবং দেখুন পরিমাপগুলি দেখার থেকে পছন্দসই ইউনিটগুলির পর্দার আকার 360x640 হয়। এগুলি আমি খুঁজে পাওয়ার জন্য টাচ ইভেন্টগুলি বা ভিউগুলিকে ব্যঙ্গ না করে প্রোগ্রামগতভাবে সন্ধান করতে চাইছি তবে এই সংখ্যাগুলি ফিরে আসবে এমন কোনও API খুঁজে পেতে আমার চরম অসুবিধা হচ্ছে।
প্রদর্শন এবং প্রদর্শনমেট্রিক্স অবজেক্টগুলি বিভিন্ন উপায়ে প্রাপ্ত সমস্ত দাবি করে পর্দার আকার 540x960 "পিক্সেল" (স্ক্রিনের কম্প্যাট মোডে থাকুক না কেন)। সুনির্দিষ্ট হওয়ার জন্য, নিম্নলিখিতগুলি সর্বদা 540x960 বলে: ডিসপ্লেমেট্রিক্স {প্রস্থ, উচ্চতা} পিক্সেল, ডিসপ্লে.গেটসাইজ (), প্রদর্শন.বিগ্রহী আকার (), ডিসপ্লে.জেট {প্রস্থ, উচ্চতা} (),
কনফিগারেশন অবজেক্টগুলি বিভিন্ন উপায়ে প্রাপ্ত স্ক্রিন {প্রস্থ, উচ্চতা} ডিপি = 360x614 (স্ক্রিনের কম্প্যাট মোডে থাকুক না কেন) বলবে। আমি বিশ্বাস করি না যে পুরো পর্দার প্রতিনিধিত্ব করে, কারণ দিক অনুপাতটি ভুল। (আমি মনে করি এটি পুরো স্ক্রিনটি স্ট্যাটাস বারকে বিয়োগ করবে; আমার পুরো স্ক্রিনটি প্রয়োজন)) আমি নিরাপদ বলেছি যে পুরো পর্দাটি 360x640 ডিপি, যদিও আমি এমন কোনও এপিআই জানি না যা 640 ফেরত দেয়।
বিভিন্ন উপায়ে প্রাপ্ত ডিসপ্লেমেট্রিক্স বলে যে স্ক্রিনের কমপ্যাট মোডে "ঘনত্ব" 1.0f, স্ক্রিনের কমপ্যাট মোডে না থাকাকালীন 1.5f is
ক্রিয়াকলাপটি
getWindow().getAttributes().{width,height}সহায়ক নয় কারণ এটিতেMATCH_PARENTপ্রকৃত আকারের চেয়ে সাধারণত থাকে । কিন্তু আমি দৃশ্যত থেকে পছন্দসই উত্তর পেতে পারেন একটি কার্যকলাপ এরgetWindow().getDecorView().getMeasured{Width,Height}()(যা আসলে যেহেতু কার্যকলাপ রয়েছে উইন্ডোর decorView নেই বিস্ময়কর চেহারা মত পুরো পর্দা আপ নিচ্ছে এটা দেখে মনে হচ্ছে এটা পর্দা বিয়োগ স্ট্যাটাস বার গ্রহণ করা হয়েছে)। তবে আমি এটির উপর নির্ভর করতে চাই না কারণ উইন্ডোটি যদি কখনও আকার পরিবর্তন করে (নরম কীবোর্ড প্রদর্শিত হয়? কেউ উইন্ডোটি সেট করে Aঅ্যাট্রিবিউটস ()? অথবা সম্ভবত আমি কোনও ক্রিয়াকলাপে আছি না), এটি স্পষ্টভাবে সব কিছু হতে চলেছে ভুল।
আমি বুঝতে নিম্নলিখিত সূত্র ধরে অনুমিত হয়: পিক্সেল = ডিপি * ঘনত্ব সব রিপোর্ট সংখ্যার সাথে একমত বলে মনে হয় যে ((3) (4), (5) উপরে) যখন না স্ক্রীন উপযুক্ততা মোড মধ্যে: 540x960 = 360x640 * 1.5 তবে স্ক্রিনের সামঞ্জস্যতা মোডে এটি যুক্ত হয় না: 540x960! = 360x640 * 1 সুতরাং, কিছু শঙ্কিত।
আমি মনে করি, এর সহজ ব্যাখ্যাটি হ'ল উপরের তালিকাভুক্ত পদ্ধতিগুলি (3) কেবলমাত্র পিক্সেলগুলির জন্য ভুল উত্তর দিচ্ছে যখন স্ক্রিনের কমপ্যাট মোডে থাকে - অর্থাৎ, তাদের উদ্দেশ্য ছিল 360x640 "পিক্সেল" ফিরিয়ে দেওয়া কিন্তু তারা ভুলভাবে ছিল পরিবর্তে 540x960 ফিরছে। তবে এটি দেখার অন্যান্য উপায়ও থাকতে পারে।
যাই হোক না কেন, উপরের ধাঁধা টুকরা থেকে মোড নির্বিশেষে পছন্দসই সংখ্যাগুলি পাওয়া, অবশ্যই একটি জটিল ধাঁধা। আমি এমন একটি উপায় পেয়েছি যা আমার ফোনে উভয় মোডে কাজ করছে বলে মনে হচ্ছে তবে এটি অত্যন্ত চক্রাকার এবং এটি দুটি অনুমানের উপর নির্ভর করে যা এখনও কম্পনহীন বলে মনে হচ্ছে (নীচের কোডের মন্তব্যে বর্ণিত)।
আমার রেসিপিটি এখানে:
/** get screen size in "pixels", i.e. touchevent/view units.
* on my droid 4, this is 360x640 or 540x960
* depending on whether the app is in screen compatibility mode
* (i.e. targetSdkVersion<=10 in the manifest) or not. */
public void getScreenSizePixels(int widthHeightInPixels[/*2*/])
{
Resources resources = getResources();
Configuration config = resources.getConfiguration();
DisplayMetrics dm = resources.getDisplayMetrics();
// Note, screenHeightDp isn't reliable
// (it seems to be too small by the height of the status bar),
// but we assume screenWidthDp is reliable.
// Note also, dm.widthPixels,dm.heightPixels aren't reliably pixels
// (they get confused when in screen compatibility mode, it seems),
// but we assume their ratio is correct.
double screenWidthInPixels = (double)config.screenWidthDp * dm.density;
double screenHeightInPixels = screenWidthInPixels * dm.heightPixels / dm.widthPixels;
widthHeightInPixels[0] = (int)(screenWidthInPixels + .5);
widthHeightInPixels[1] = (int)(screenHeightInPixels + .5);
}
পর্দার আকার খুঁজে পাওয়ার জন্য আরও ভাল / ক্লিনার কোন উপায় আছে ??
DisplayMetricsএই জাতীয় পরিবর্তনগুলি কখনই আপডেট হয় না। মত বিষয় আছে এই ইতিমধ্যে দায়ের করেন।