यदि आप मल्टी-विंडो मोड में हैं और स्क्रीन के किस हिस्से में हैं, तो आपको यह पता लगाने की बजाय, आपको अपना नेविगेशन व्यू हेडर सम्मान प्रणाली विंडोज इंसेट बनाने की आवश्यकता है।
आम तौर पर आप केवल एक खिड़की की देखभाल करते हैं - जिस पर आपका ऐप खींचा जाता है। आमतौर पर आप यह भी नहीं सोचते कि कोई खिड़कियां हैं। क्या आपका ऐप फुलस्क्रीन नहीं खींचा है? खैर, वास्तव में नहीं। आमतौर पर सिस्टम बार के लिए आरक्षित कुछ जगह होती है, जैसे शीर्ष पर स्टेटस बार और नीचे नेविगेशन बार। वे अलग खिड़कियों - सिस्टम विंडोज़ में खींचे जाते हैं। (ओह, और अब हमारे पास बहु-खिड़की मोड है। बहु-ऐप-विंडो मोड की तरह, क्योंकि यदि आप सिस्टम विंडो की गिनती करते हैं तो मल्टी-विंडो थोड़ी देर के लिए आसपास रही है।)
आप कर सकते हैं आपका नेविगेशन व्यू हेडर इसके इन्सेट को एडजस्ट करता है कि यह सिस्टम विंडो के तहत है (इस मामले में: स्टेटस बार) या केवल कुछ सरल बदलावों के साथ नहीं।
नेविगेशन दृश्य यह मानते हुए कि तरह परिभाषित किया गया है:
<android.support.design.widget.NavigationView
...
android:fitsSystemWindows="true"
app:headerLayout="@layout/nav_header_main"
... />
और वहाँ nav_header_main.xml
में एक साधारण हैडर लेआउट है:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="@dimen/nav_header_height"
android:background="@drawable/nav_header_background"
android:orientation="vertical"
android:paddingBottom="16dp"
android:paddingLeft="16dp"
android:paddingRight="16dp"
android:paddingTop="32dp">
<ImageView
android:id="@+id/imageView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@android:drawable/default_profile_picture" />
...
</LinearLayout>
आप बस ऐसे ही इसे बदल की जरूरत है:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="@dimen/nav_header_height"
android:background="@drawable/nav_header_background"
android:fitsSystemWindows="true"
android:orientation="vertical">
<ImageView
android:id="@+id/imageView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@android:drawable/sym_def_app_icon"
android:layout_marginLeft="16dp"
android:layout_marginRight="16dp"
android:layout_marginTop="8dp"/>
...
</LinearLayout>
- सबसे पहले आपको इसकी आवश्यकता है लेआउट में
android:fitsSystemWindows="true"
जोड़ें।
- अब आपको शीर्ष पैडिंग छोटे बनाने की आवश्यकता है, क्योंकि
fitsSystemWindows
स्वचालित रूप से स्टेटस बार के आकार को पैडिंग जोड़ देगा। तो पहले आपका शीर्ष पैडिंग आपके हेडर के शीर्ष से था, अब यह केवल स्टेटस बार के नीचे से है।
- और आपको अपने सभी पैडिंग को कहीं और लेआउट से ले जाना है (उदाहरण के लिए मैंने उन्हें बच्चों के दृश्यों पर मार्जिन में ले जाया है), क्योंकि
fitsSystemWindows
उन पैडिंग को ओवरराइट कर देगा।
इसके बाद यदि आपका ऐप मल्टी-विंडो स्प्लिट के निचले भाग में है तो स्टेटस बार के लिए पैडिंग नहीं जोड़ा जाएगा। यह आपके नेविगेशन व्यू को किसी भी अन्य मामलों में ठीक से दिखने देगा जहां यह स्टेटस बार के नीचे नहीं है या यदि स्टेटस बार एंड्रॉइड के किसी भी भविष्य संस्करण या कुछ पागल कस्टम रोम में आकार बदलता है।
स्रोत
2016-08-25 21:43:19
मैंने सोचा था एंड्रॉइड: फिटनेस सिस्टमविंडोज़ = नेविगेशन व्यू में "सत्य" पर्याप्त था। एंड्रॉइड जोड़ना: हेड लेआउट में फ़िट्स सिस्टम सिस्टम भी समस्या को ठीक करता है। धन्यवाद – br00
मुझे अभी पता चला है कि यह समाधान केवल एपीआई 24+ के लिए काम करता है – br00