আমি ধারণাটি বোঝার জন্য সংগ্রাম করছি 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
উদাহরণস্বরূপ, এটি ক্ষেত্রে নয় ।