অ্যান্ড্রয়েড এসডিকে getWidth / Height () এবং getMeasuredWidth / Height () এর মধ্যে পার্থক্য কী?


91

অ্যান্ড্রয়েড ডকুমেন্টেশন বলছেন একটি দৃশ্য, জন্য দুই মাপ নেই মাপা মাত্রা এবং অঙ্কন মাত্রা । পরিমাপের মাত্রা হ'ল পরিমাপ পাসের ( গণমাধ্যম পদ্ধতি) একক গণনা করা হয়েছে , যখন অঙ্কনের মাত্রা স্ক্রিনের প্রকৃত আকার। বিশেষত, ডকুমেন্টেশন বলে যে:

এই মানগুলি পরিমাপ করা প্রস্থ এবং উচ্চতা থেকে আলাদা হতে পারে না।

সুতরাং, আমার প্রশ্নটি: অঙ্কনের মাত্রাটি মাপা মাত্রার চেয়ে আলাদা কী হতে পারে? যদি onMeasure (int, int) পদ্ধতিটি বিন্যাসের প্রয়োজনীয়তাগুলিকে সম্মান করে (পরামিতি প্রস্থের পরিমাপ হিসাবে বিবেচনা করা হয় উচ্চতামাপ স্পেস এবং উচ্চতামাপস্পেক , কীভাবে এসডিকে সিদ্ধান্ত নিতে পারে যে ভিউটির আলাদা অঙ্কনের আকার থাকতে হবে?

অতিরিক্তভাবে, কীভাবে / কোথায় অ্যান্ড্রয়েড সোর্স কোডে পরিমাপ করা প্রস্থ / উচ্চতা অঙ্কনের প্রস্থ / উচ্চতা গণনা করতে ব্যবহৃত হয়? আমি উত্স উত্স কোডটি দেখার চেষ্টা করেছি, তবে চূড়ান্ত প্রস্থ / উচ্চতা গণনা করতে কীভাবে পরিমাপ করা প্রস্থ / উচ্চতা ব্যবহৃত হয় তা আমি বুঝতে পারি না। প্যাডিংয়ের সাথে এটির কিছু থাকতে পারে তবে আমি নিশ্চিত নই।


আমি মনে করি যে যদি ভিউতে কোনও স্ক্রোল যুক্ত হয় তবে এই ব্যবস্থাগুলি পৃথক হতে পারে।
ইয়ুরি

হতে পারে, তবে আমি একটি কাস্টম ভিউ গ্রুপ তৈরি করেছি এবং এটি আমার কোডে ঘটছে। যেখানে এই আচরণটি ঘটে সেখানে আমি স্ক্রোল নিয়ে কাজ করছি না with সুতরাং আমি মনে করি এটির সাথে জড়িত স্ক্রোলের চেয়ে আরও বেশি কিছু থাকা উচিত।
lgfischer

আমি নিশ্চিত করি, প্রদত্ত দিক-অনুপাতকে বলপূর্বক বলার জন্য আমি একটি কাস্টম ভিউগ্রুপও বজায় রেখেছি: আমি পরিমাপ করা প্রস্থ এবং উচ্চতা (নিম্ন বা সমান তারপর প্রস্তাবিত) বাধ্য করেছি, তবে ফলস্বরূপ সত্য প্রস্থ এবং উচ্চতা পরিবর্তিত হয়নি (পরিমাপকরা নয়)। স্ক্রোলের সাথে কোনও সম্পর্ক নেই। আমি সত্যিকারের প্রস্থ এবং উচ্চতা জোর করার কোনও উপায় খুঁজে পাচ্ছি না।
অ্যারল্যাবস 9'16

উত্তর:


101

নামটি থেকে বোঝা যায় যে পরিমাপযোগ্য ও প্রস্থের স্তরটি পরিমাপক ও প্রস্থের সময় ব্যবহৃত হয় used

আমাকে একটি উদাহরণ দিতে দাও,

একটি উইজেটকে নিজেকে পরিমাপ করতে বলা হয়, উইজেটটি বলে যে এটি 200px দ্বারা 200px হতে চায়। এটি পরিমাপ করা হয় প্রস্থ / উচ্চতা।

লেআউট পর্যায়ে, যেমন অন-লেআউট পদ্ধতিতে। পদ্ধতিটি তার বাচ্চাদের পরিমাপযোগ্য প্রস্থ / উচ্চতা ব্যবহার করতে পারে বা ভিউয়ের লেআউট পদ্ধতিতে কল করে একটি নতুন প্রস্থ / উচ্চতা নির্ধারণ করতে পারে।

আসুন বলুন যে অনলআউট পদ্ধতিটি চাইল্ডভিউ.এলআউটকে কল করে 0

আমি লেআউট পদ্ধতির বাইরে পরিমাপকৃত প্রস্থ / উচ্চতা ব্যবহার না করার পরামর্শ দেব।

সংক্ষেপ .

  1. onMeasure -> পরিমাপযোগ্য প্রস্থ / পরিমাপযোগ্য উচ্চতা সেট আপ করে
  2. onLayout -> উইজেটের প্রস্থ / উচ্চতা সেট করে।

অতিরিক্তভাবে
public void View.layout(int l, int t, int r, int b)
এমন জায়গা বলে মনে হয় যেখানে অবস্থান এবং আকারের অ্যাসাইনমেন্টটি ঘটে।


এটি হ'ল, একটি ভিউয়ের "আসল" মাত্রাটি পেতে আমাদের সর্বদা getWidth / getHight ব্যবহার করা উচিত?
সুতিয়ানশি

4
হ্যাঁ, তবে আপনি যদি নিজের নিজস্ব বিন্যাসটি করেন তবে আপনার প্রস্থের পরিবর্তে পরিমাপযোগ্য প্রস্থ ব্যবহার করা উচিত।
প্রকাশ নাদের

সুতরাং, onMeasure () এর ভিতরে ডাইমেশন সেট করার উদ্দেশ্য কী? আমি বলতে চাইছি, লেআউট পাসটি সর্বশেষটি, যেখানে আপনি দৃশ্যের চূড়ান্ত মাত্রাগুলি সেট করেছেন, পরিমাপের মাত্রা নির্বিশেষে সম্ভব
এডোয়ার্ডোটোগনি

@edoardotognoni এটি বিন্যাসের উপর নির্ভর করে (লিনিয়ারলআউট, রিলেটিভ লেআউট বা আপনার কাস্টম বিন্যাস), যাতে দেখার সঠিক আকার এবং অবস্থান দেয়।
প্রকাশ নাদার

ঠিক আছে আসুন বলুন যে ভিউটি "আমাকে এই মাত্রাগুলি পছন্দ করে" বলে। লেআউটটি বলছে "আপনার এই মাত্রা থাকবে"। এটা কি ঠিক?
এডোয়ার্ডোটোগোনি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.