7

Ich habe eine Tätigkeit, die eine DrawerLayout und NavigationView von Support-Bibliothek beherbergt. Ich setze ein Kopfzeilenlayout für die Navigationsansicht und möchte, dass die Kopfhöhe der Navigation "wrap_content" lautet. Wenn ich also die Höhe auf "wrap_content" setze, geht das Header-Layout hinter die Statusleiste.Einstellung Statusbar Polsterung NavigationView in Android

Das Ergebnis, das ich will, ist, dass die Navigationsleiste hinter der Statusleiste ziehen soll, aber die Navigation Header durch die Statusbar Höhe nach unten gedrückt werden sollen.

Unten ist der Screenshot von dem, was ich erhalte. Beachten Sie die Schaltfläche "ANMELDEN" hinter der Statusleiste.

screenshot

Aktivität Layout

<android.support.v4.widget.DrawerLayout 
xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:app="http://schemas.android.com/apk/res-auto" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:id="@+id/nav_drawer" 
android:fitsSystemWindows="true"> 

<android.support.design.widget.CoordinatorLayout 
       android:layout_width="match_parent" 
       android:layout_height="match_parent"> 

    <android.support.v4.view.ViewPager 
     android:id="@+id/view_pager" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     app:layout_behavior="@string/appbar_scrolling_view_behavior"></android.support.v4.view.ViewPager> 
    <android.support.design.widget.AppBarLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content"> 

    <include layout="@layout/include_toolbar"/> 

     <android.support.design.widget.TabLayout 
      app:theme="@style/ThemeOverlay.AppCompat.Dark" 
      style="@style/MyCustomTabLayout" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:id="@+id/tabs" 
      /> 

    </android.support.design.widget.AppBarLayout> 

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

<android.support.design.widget.NavigationView 
    android:id="@+id/navigation_view" 
    android:layout_width="wrap_content" 
    android:layout_height="match_parent" 
    app:headerLayout="@layout/nav_header" 
    app:menu="@menu/menu_navigation" 
    android:fitsSystemWindows="true" 
    android:layout_gravity="start"/> 

</android.support.v4.widget.DrawerLayout> 

Navigationsansicht Kopfaufbau

<?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="wrap_content" 
      android:background="?attr/colorPrimaryDark" 
      android:padding="16dp" 
      android:theme="@style/ThemeOverlay.AppCompat.Dark" 
      android:orientation="vertical" 
      android:fitsSystemWindows="true" 
      android:gravity="bottom"> 

<TextView 
    android:visibility="gone" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:id="@+id/text_user_name" 
    android:textAppearance="@style/TextAppearance.AppCompat.Body1"/> 

<TextView 
    android:visibility="gone" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:id="@+id/text_email" 
    android:textAppearance="@style/TextAppearance.AppCompat.Body2"/> 

<Button 
    android:id="@+id/button_sign_in" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="Sign In"/> 

</LinearLayout> 

Ich habe nach einer Lösung gesucht, aber durch Stackoverflow kann sie nicht finden. Also bitte etwas Licht. Danke im Voraus.

+0

Glück gehabt auf Dies? – swooby

Antwort

7
<android.support.design.widget.NavigationView 
android:id="@+id/navigation_view" 
android:layout_width="wrap_content" 
android:layout_height="match_parent" 
app:headerLayout="@layout/nav_header" 
app:menu="@menu/menu_navigation" 
android:fitsSystemWindows="false" 
android:layout_gravity="start"/> 

android: fitsSystemWindows = "false"

und CoordinatorLayout => android: fitsSystemWindows = "false"

+0

Hallo, es wäre schön, wenn Sie weitere Erläuterungen zu Ihrer Lösung geben könnten. (Tipp: Menschen sind auch eher Ihre Lösung zu akzeptieren;)) – bobylito

+7

Dies bewirkt, dass die Schublade unter dem statusbar gezogen werden, die nicht das gewünschte Verhalten. – SpaceBison

+0

@SpaceBison Dies * ist * das gewünschte Verhalten. Dies ist auch das * Standard * -Verhalten. Der Punkt ist, op will, dass der * Button * nicht unter der Statusleiste angezeigt wird. Zum Beispiel durch Hinzufügen von Polsterung darüber. –

6

Eine mögliche Lösung ist dimens.xml zu verwenden:

Headers für API 19 und unter: res/Werte /dimens.xml

<resources> 
    .... 

    <dimen name="navigation_header_height">150dp</dimen> 
    <dimen name="navigation_header_top_padding">0dp</dimen> 
</resources> 

-Header für API 21 und nach oben: res/Werte-v21 /dimens.xml

<resources> 
    .... 

    <dimen name="navigation_header_height">174dp</dimen> 
    <dimen name="navigation_header_top_padding">24dp</dimen> 
</resources> 

Beispiel Header: res/Layout /nav_header.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
       android:layout_width="240dp" 
       android:layout_height="@dimen/navigation_header_height" 
       android:paddingTop="@dimen/navigation_header_top_padding" 
       android:background="@color/primary" 
       android:orientation="vertical"> 

    // Header's views goes here 
</LinearLayout> 
+0

Dies sollte die akzeptierte Antwort sein. Auf API 21 und nach oben kann die Navigationsleiste über die Statusleiste angezeigt werden, so dass eine zusätzliche Top-Polsterung sollte auf der Schaltfläche Anmelden in Betracht gezogen werden. Da die Navigationsleiste unter API -21 immer unterhalb der Statusleiste angezeigt wird, sollte diese obere Auffüllung nicht hinzugefügt werden. – IRPdevelop

+0

Schöne Lösung, einfach und effektiv. – Lancelot

+1

Ich denke nicht, dass das eine gute Lösung ist. Erstens ist die Standardhöhe der Statusleiste 25dp, nicht 24dp. Zweitens kann diese Lösung nicht alle Gerätesituationen abdecken, einige Geräte können eine untypische Höhenstatusleiste haben oder sogar keine Statusleiste haben. – Loyea