2016-10-09 2 views
0

У меня есть пользовательский вид в NavigationView. Проблема в том, какая комбинация, fitsSystemWindows не работает в NavigationView. и верхний элемент в выдвижном ящике всегда остается за прозрачной панелью состояния.fitsSystemWindows не работает в пользовательском макете в NavigationView

main_layout

<?xml version="1.0" encoding="utf-8"?> 
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:id="@+id/drawer_layout" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
tools:openDrawer="start"> 

<include 
    layout="@layout/app_bar_main" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" /> 

<android.support.design.widget.NavigationView 
    android:id="@+id/nav_view" 
    android:layout_width="wrap_content" 
    android:layout_height="match_parent" 
    android:layout_gravity="start" 
    android:background="@color/colorPrimaryBottomBar" 
    android:fitsSystemWindows="true"> 
     <include layout="@layout/navigation_main_drawer" /> 
</android.support.design.widget.NavigationView> 
</android.support.v4.widget.DrawerLayout> 

navigation_main_drawer

<?xml version="1.0" encoding="utf-8"?> 
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:fitsSystemWindows="true"> 

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:clipToPadding="false" 
    android:fillViewport="true" 
    android:fitsSystemWindows="true" 
    android:paddingBottom="@dimen/default_margin"> 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_margin="@dimen/default_margin" 
     android:fitsSystemWindows="true" 
     android:orientation="vertical"> 

     <LinearLayout 
      ... 
     </LinearLayout> 

     <View 
      ... /> 

     <LinearLayout 
      ... 
     </LinearLayout> 

     <View 
      ... /> 

     <LinearLayout 
      ... 
     </LinearLayout> 

     <View 
      ... /> 

    </LinearLayout> 
</ScrollView> 
</android.support.design.widget.CoordinatorLayout> 

ответ

4

Итак, если я правильно понял, вы хотите, чтобы ваш пользовательский вид, чтобы получить необходимую прокладку так, чтобы его содержимое не обрезается строкой состояния справа?

Если это так, то вам необходимо установить

android:fitsSystemWindows="true" 

в корневом DrawerLayout, а затем установите

android:fitsSystemWindows="false" 

в компоненте NavigationView. Обратите внимание, что это ложь, не правда :)

ОБОСНОВАНИЕ:

Новый компонент NavigationView разработанный Google использует свойство «fitsSystemWindows», чтобы настроить, как его содержание относится к строке состояния. Обратите внимание, что «настройка» здесь является ключевым словом, поскольку жестко заданное поведение для этого конкретного компонента заключается в том, что его содержимое должно перекрывать строку состояния и достигать верхней части экрана, в то время как сама строка состояния должна быть прозрачной, чтобы содержимое ящика через него можно увидеть. Это указано как часть нового Material Design, как видно из https://material.io/guidelines/patterns/navigation-drawer.html.

Таким образом, единственный способ отключить это поведение, чтобы сказать NavigationView к не сигналу свойства fitsSystemWindow, и только установить это в корне DrawerLayout, который содержит все другие представления, которые будут делать то, что можно было бы ожидать и блокнот все его дети видят надлежащим образом.

Обратите внимание, что это рассуждение подтверждается также this comment от разработчика Android Ian Lake в сообщении блога, говорящем об этом конкретном объекте.

P.S.

Я хотел бы также удалить все упоминания в собственность «fitsSystemWindows» во всех дочерних элементов в navigation_main_drawer XML, на всякий случай, хотя он, вероятно, не имеют никакого эффекта, как это ..

+0

«Обратите внимание, что это false, not true :) "записка спасла мой день! – HANiS

Смежные вопросы