5

मैं एंड्रॉइड एन के मल्टी-विंडो मोड में नेविगेशन व्यू से paddingTop/marginTop को हटाना चाहता हूं। जीमेल की तरह पहले से ही करता है। यदि आप नीचे दी गई छवि देखते हैं, तो मैं नेविगेशन व्यू की शुरुआत में स्टेटस बार के बराबर आकार के साथ सामान्य पैडिंग के बारे में बात कर रहा हूं।एंड्रॉइड एन मल्टी-विंडो मोड में नेविगेशन व्यू टॉप पैडिंग को हटा रहा है

enter image description here

तो मल्टी विंडो मोड (नीचे छवि देखें) मुझे लगता है कि गद्दी दूर करने के लिए जब मेरे एप्लिकेशन स्क्रीन के दूसरे भाग में है में मूल रूप से।

enter image description here

नई एपीआई 24 से दुर्भाग्य से आप isInMultiWindowMode() है, लेकिन यह पता करने के लिए है, जिसमें स्क्रीन के भाग अपने अनुप्रयोग है संभव नहीं है।

उत्तर

2

यदि आप मल्टी-विंडो मोड में हैं और स्क्रीन के किस हिस्से में हैं, तो आपको यह पता लगाने की बजाय, आपको अपना नेविगेशन व्यू हेडर सम्मान प्रणाली विंडोज इंसेट बनाने की आवश्यकता है।

आम तौर पर आप केवल एक खिड़की की देखभाल करते हैं - जिस पर आपका ऐप खींचा जाता है। आमतौर पर आप यह भी नहीं सोचते कि कोई खिड़कियां हैं। क्या आपका ऐप फुलस्क्रीन नहीं खींचा है? खैर, वास्तव में नहीं। आमतौर पर सिस्टम बार के लिए आरक्षित कुछ जगह होती है, जैसे शीर्ष पर स्टेटस बार और नीचे नेविगेशन बार। वे अलग खिड़कियों - सिस्टम विंडोज़ में खींचे जाते हैं। (ओह, और अब हमारे पास बहु-खिड़की मोड है। बहु-ऐप-विंडो मोड की तरह, क्योंकि यदि आप सिस्टम विंडो की गिनती करते हैं तो मल्टी-विंडो थोड़ी देर के लिए आसपास रही है।)

आप कर सकते हैं आपका नेविगेशन व्यू हेडर इसके इन्सेट को एडजस्ट करता है कि यह सिस्टम विंडो के तहत है (इस मामले में: स्टेटस बार) या केवल कुछ सरल बदलावों के साथ नहीं।

नेविगेशन दृश्य यह मानते हुए कि तरह परिभाषित किया गया है:

<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> 
  1. सबसे पहले आपको इसकी आवश्यकता है लेआउट में android:fitsSystemWindows="true" जोड़ें।
  2. अब आपको शीर्ष पैडिंग छोटे बनाने की आवश्यकता है, क्योंकि fitsSystemWindows स्वचालित रूप से स्टेटस बार के आकार को पैडिंग जोड़ देगा। तो पहले आपका शीर्ष पैडिंग आपके हेडर के शीर्ष से था, अब यह केवल स्टेटस बार के नीचे से है।
  3. और आपको अपने सभी पैडिंग को कहीं और लेआउट से ले जाना है (उदाहरण के लिए मैंने उन्हें बच्चों के दृश्यों पर मार्जिन में ले जाया है), क्योंकि fitsSystemWindows उन पैडिंग को ओवरराइट कर देगा।

इसके बाद यदि आपका ऐप मल्टी-विंडो स्प्लिट के निचले भाग में है तो स्टेटस बार के लिए पैडिंग नहीं जोड़ा जाएगा। यह आपके नेविगेशन व्यू को किसी भी अन्य मामलों में ठीक से दिखने देगा जहां यह स्टेटस बार के नीचे नहीं है या यदि स्टेटस बार एंड्रॉइड के किसी भी भविष्य संस्करण या कुछ पागल कस्टम रोम में आकार बदलता है।

+0

मैंने सोचा था एंड्रॉइड: फिटनेस सिस्टमविंडोज़ = नेविगेशन व्यू में "सत्य" पर्याप्त था। एंड्रॉइड जोड़ना: हेड लेआउट में फ़िट्स सिस्टम सिस्टम भी समस्या को ठीक करता है। धन्यवाद – br00

+0

मुझे अभी पता चला है कि यह समाधान केवल एपीआई 24+ के लिए काम करता है – br00

0

मेरे लिए कुछ भी नहीं है तो काम कर रहा था मैं इस मार्ग जा रहा समाप्त हो गया है और यह काम किया है:

<android.support.design.widget.NavigationView 
    ... 
    app:insetForeground="@null"/> 

तकनीकी तौर पर, सन्निवेश अभी भी मौजूद हैं लेकिन जब से insetForeground संसाधन उन पर आकर्षित करने के लिए इस्तेमाल किया अब रिक्त है , logic is skipped in ScrimInsetsFrameLayout's onDraw method (जो नेविगेशन व्यू का मूल वर्ग है)।

तो जब सब कुछ विफल हो जाता है, तो यह एक काफी कुशल मार्ग है।

संबंधित मुद्दे