ফিটসিসটেম উইন্ডোজ ঠিক কী করে?


126

আমি ধারণাটি বোঝার জন্য সংগ্রাম করছি 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সত্য হিসাবে সেট করা ডিফল্ট প্রয়োগটি প্রাথমিকভাবে ডকুমেন্টেড যা করায় তেমন কৌশলটি করে না। আপনাকে এটিকে ওভাররাইড করতে হবে এবং অন্যান্য উল্লিখিত শ্রেণীর মতো একই পতাকা যুক্ত করতে হবে। আমি কিছু অনুপস্থিত করছি?


1
এটি একটি বাগের মতো মনে হচ্ছে, আমি অ্যান্ড্রয়েড ইস্যু ট্র্যাকারে একটি বাগ প্রতিবেদন পোস্ট করেছি
টিম রায়

1
এখানে চেক করুন: मध्यम.com
ফাতেহ এস।

লিঙ্কের জন্য ধন্যবাদ, খুব দরকারী। তবুও, এটি নিশ্চিত করে যে সেখানে অসঙ্গতি রয়েছে। লিঙ্কযুক্ত পৃষ্ঠায় এটি বলেছে যে নতুন কিছু উইজেট যেমন CoordinatorLayoutস্ট্যাটাস বারের পিছনে রঙ করা উচিত কিনা তা চিহ্নিত করতে এই পতাকাটি ব্যবহার করে। FrameLayoutউদাহরণস্বরূপ, এটি ক্ষেত্রে নয় ।
পিন

2
এটি একটি দুর্দান্ত প্রশ্ন এবং অ্যান্ড্রয়েড উত্স কোডটি অনুসন্ধান করা খুব সুন্দর কাজ ছিল। আমি বিশেষত প্রশংসা করেছি যে আপনি কীভাবে নতুন এমডি ক্লাসগুলি আলাদাভাবে ফিট করে সিস্টেমে উইন্ডোগুলি পরিচালনা করেন .... আমি এটি বের করার চেষ্টা করতে গিয়ে পাগল হয়ে যাচ্ছিলাম!
কুলডুড

উত্তর:


19

সিস্টেম উইন্ডোগুলি স্ক্রিনের সেই অংশ যেখানে সিস্টেম হয় অ-ইন্টারেক্টিভ (স্ট্যাটাস বারের ক্ষেত্রে) বা ইন্টারেক্টিভ (নেভিগেশন বারের ক্ষেত্রে) সামগ্রীটি আঁকছে।

বেশিরভাগ সময়, আপনার অ্যাপ্লিকেশনটির স্ট্যাটাস বার বা নেভিগেশন বারের অধীনে আঁকার দরকার নেই, তবে আপনি যদি করেন: আপনার অবশ্যই নিশ্চিত করতে হবে যে ইন্টারেক্টিভ উপাদানগুলি (বোতামগুলির মতো) সেগুলির নীচে লুকানো নেই। এটিই অ্যান্ড্রয়েডের ডিফল্ট আচরণ: ফিটসিসটেম উইন্ডোস = "সত্য" বৈশিষ্ট্যটি আপনাকে দেয়: বিষয়বস্তুগুলি সিস্টেম উইন্ডোতে আবৃত না হয় তা নিশ্চিত করার জন্য এটি ভিউয়ের প্যাডিং সেট করে।

https://medium.com/google-developers/why-would-i-want-to-fitssystemwindows-4e26d9ce1eec


1
ঠিক আছে আমি বুঝতে পেরেছি
এমজে স্টুডিও

6

এটি সিস্টেম বারের পেছনে আঁকবে না এটি একই ধরণের রঙের সাথে এটি বার করার জন্য বারের পিছনে প্রসারিত করে তবে এতে থাকা ভিউগুলি যদি স্ট্যাটাস বারের ভিতরে প্যাড করে থাকে তবে যদি তা বোঝা যায়

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