আমি ধারণাটি বোঝার জন্য সংগ্রাম করছি fitsSystemWindowsযেহেতু এটি বিভিন্ন কাজ করে on অফিসিয়াল ডকুমেন্টেশন অনুযায়ী এটি একটি
পরিস্থিতি বারের মতো সিস্টেম উইন্ডোর উপর ভিত্তি করে ভিউ লেআউটটি সামঞ্জস্য করতে বুলিয়ান অভ্যন্তরীণ বৈশিষ্ট্য। যদি সত্য হয়, সিস্টেম উইন্ডোগুলির জন্য স্থান ত্যাগ করতে এই দৃশ্যের প্যাডিং সামঞ্জস্য করে ।
এখন, View.javaক্লাসটি পরীক্ষা করে আমি দেখতে পাচ্ছি যে সেট করা থাকলে true, উইন্ডো ইনসেটগুলি (স্ট্যাটাস বার, নেভিগেশন বার ...) ভিউ প্যাডিংগুলিতে প্রয়োগ করা হয়, যা উপরের উদ্ধৃত ডকুমেন্টেশন অনুসারে কাজ করে। এটি কোডের প্রাসঙ্গিক অংশ:
private boolean fitSystemWindowsInt(Rect insets) {
if ((mViewFlags & FITS_SYSTEM_WINDOWS) == FITS_SYSTEM_WINDOWS) {
mUserPaddingStart = UNDEFINED_PADDING;
mUserPaddingEnd = UNDEFINED_PADDING;
Rect localInsets = sThreadLocal.get();
if (localInsets == null) {
localInsets = new Rect();
sThreadLocal.set(localInsets);
}
boolean res = computeFitSystemWindows(insets, localInsets);
mUserPaddingLeftInitial = localInsets.left;
mUserPaddingRightInitial = localInsets.right;
internalSetPadding(localInsets.left, localInsets.top,
localInsets.right, localInsets.bottom);
return res;
}
return false;
}
নতুন ম্যাটারিয়াল ডিজাইনের সাথে এখানে নতুন ক্লাস রয়েছে যা এই পতাকাটির ব্যাপক ব্যবহার করে এবং এখানেই বিভ্রান্তি আসে। অনেকগুলি উত্সে fitsSystemWindowsসিস্টেম বারগুলির পিছনে দৃশ্যটি সেট করতে পতাকা হিসাবে উল্লেখ করা হয়। এখানে দেখুন ।
ViewCompat.javaজন্য দস্তাবেজ setFitsSystemWindowsবলে:
এই ভিউটি স্ট্যাটাস বারের মতো সিস্টেমের স্ক্রিন সজ্জার জন্য অ্যাকাউন্ট করা উচিত কিনা এবং সেট করে; তা হল, l @ লিঙ্ক ভিউ # ফিটসিসটেম উইন্ডোস (রেক্ট) of এর ডিফল্ট বাস্তবায়ন কার্যকর হবে কিনা তা নিয়ন্ত্রণ করে। আরও তথ্যের জন্য সেই পদ্ধতিটি দেখুন ।
এই অনুসারে, fitsSystemWindowsখালি ফাংশনটি fitsSystemWindows()কার্যকর করা হবে মানে ? নতুন মেটেরিয়াল ক্লাসগুলি কেবল স্ট্যাটাস বারের নীচে আঁকার জন্য এটি ব্যবহার করছে বলে মনে হচ্ছে। যদি আমরা DrawerLayout.javaএর কোডটি দেখি তবে আমরা এটি দেখতে পারি:
if (ViewCompat.getFitsSystemWindows(this)) {
IMPL.configureApplyInsets(this);
mStatusBarBackground = IMPL.getDefaultStatusBarBackground(context);
}
...
public static void configureApplyInsets(View drawerLayout) {
if (drawerLayout instanceof DrawerLayoutImpl) {
drawerLayout.setOnApplyWindowInsetsListener(new InsetsListener());
drawerLayout.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE
| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
}
}
এবং আমরা নতুন CoordinatorLayoutবা একই প্যাটার্ন দেখতে AppBarLayout।
এই ডকুমেন্টেশন হিসাবে ঠিক বিপরীত পথে কাজ করে না fitsSystemWindows? শেষ ক্ষেত্রে, এর অর্থ সিস্টেম বারগুলির পিছনে আঁকুন ।
তবে, আপনি যদি FrameLayoutস্ট্যাটাস বারের পিছনে নিজেকে আঁকতে চান , fitsSystemWindowsসত্য হিসাবে সেট করা ডিফল্ট প্রয়োগটি প্রাথমিকভাবে ডকুমেন্টেড যা করায় তেমন কৌশলটি করে না। আপনাকে এটিকে ওভাররাইড করতে হবে এবং অন্যান্য উল্লিখিত শ্রেণীর মতো একই পতাকা যুক্ত করতে হবে। আমি কিছু অনুপস্থিত করছি?
CoordinatorLayoutস্ট্যাটাস বারের পিছনে রঙ করা উচিত কিনা তা চিহ্নিত করতে এই পতাকাটি ব্যবহার করে। FrameLayoutউদাহরণস্বরূপ, এটি ক্ষেত্রে নয় ।