it-swarm.com.de

Wie kann ich DrawerLayout unter der Symbolleiste anzeigen lassen?

Wie kann das Schubladenlayout unterhalb der Aktionsleiste/Symbolleiste erfolgen? Ich verwende eine v7: 21-kompatible Bibliothek mit der neuen Toolbar-Ansicht.

Beispiele, die ich sehe, sieht aus

<Android.support.v4.widget.DrawerLayout
xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:id="@+id/my_drawer_layout"
Android:layout_width="match_parent"
Android:layout_height="match_parent">

<!-- drawer view -->
<LinearLayout
    Android:layout_width="304dp"
    Android:layout_height="match_parent"
    Android:layout_gravity="left|start">

    <!-- drawer content -->

</LinearLayout>

<!-- normal content view -->
<LinearLayout
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    Android:orientation="vertical">

    <!-- The toolbar -->
    <Android.support.v7.widget.Toolbar  
        Android:id="@+id/my_awesome_toolbar"
        Android:layout_height="wrap_content"
        Android:layout_width="match_parent"
        Android:minHeight="?attr/actionBarSize"
        Android:background="?attr/colorPrimary" />

    <!-- The rest of content view -->

</LinearLayout>  

Die Symbolleiste wird jedoch durch die Schublade ausgeblendet, wodurch ein animiertes Hamburger-Symbol (wie v7.ActionBarDrawerToggle) unbrauchbar wird, da es unterhalb der Schublade nicht sichtbar ist. Ich möchte jedoch die neue Toolbar-Ansicht verwenden, um das Material-Design besser zu unterstützen.

Wie kann ich das erreichen? Ist es möglich, DrawerLayout als Ansicht auf oberster Ebene zu verwenden?

47
user1309971
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:app="http://schemas.Android.com/apk/res-auto"
Android:orientation="vertical"
Android:layout_width="match_parent"
Android:layout_height="match_parent">

    <!-- The toolbar -->
    <Android.support.v7.widget.Toolbar  
        Android:id="@+id/my_awesome_toolbar"
        Android:layout_height="wrap_content"
        Android:layout_width="match_parent"
        Android:minHeight="?attr/actionBarSize"
        Android:background="?attr/colorPrimary" />

    <Android.support.v4.widget.DrawerLayout
    xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:id="@+id/my_drawer_layout"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent">

        <!-- drawer view -->
        <LinearLayout
            Android:layout_width="304dp"
            Android:layout_height="match_parent"
            Android:layout_gravity="left|start">

            <!-- drawer content -->

        </LinearLayout>

        <!-- normal content view -->
        <LinearLayout
            Android:layout_width="match_parent"
            Android:layout_height="match_parent"
            Android:orientation="vertical">



            <!-- The rest of content view -->

        </LinearLayout>  
    </Android.support.v4.widget.DrawerLayout>

</LinearLayout>  
94

ich denke nicht, dass Sie dies können, wenn Sie custom toolbar verwenden.

um dies zu umgehen, müssen Sie jedoch einen top_margin für die Schublade festlegen (dasselbe bei Google Play Store!)

<!-- drawer view -->
<LinearLayout
    Android:layout_marginTop="?attr/actionBarSize"
...

wenn du eine bessere Lösung gefunden hast sag es mir auch;)

22
EC84B4

Meine Lösung: Vorlage mit Android Studio 2.1.2 generieren, Schubladenvorlage:

Es sind nur drei Änderungen erforderlich: Setzen Sie den Rand oben in der Ansicht NavigationView und löschen Sie die Overloap-Statusleiste in style.xml 

<item name="Android:windowDrawsSystemBarBackgrounds">false</item>

Android:fitsSystemWindows="false"

layout main.xml set margin top get size actionbar value Android:layout_marginTop="?attr/actionBarSize"

<?xml version="1.0" encoding="utf-8"?>
<Android.support.v4.widget.DrawerLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    xmlns:app="http://schemas.Android.com/apk/res-auto"
    xmlns:tools="http://schemas.Android.com/tools"
    Android:id="@+id/drawer_layout"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    Android:fitsSystemWindows="false"
    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:layout_marginTop="?attr/actionBarSize"
        Android:fitsSystemWindows="false"
        app:headerLayout="@layout/nav_header_main"
        app:menu="@menu/activity_main_drawer" />

</Android.support.v4.widget.DrawerLayout>
4
Webserveis

Ändern Sie den Layoutstil Ihrer Schublade wie folgt

RelativeLayout
 ----Toolbar
 ----DrawerLayout
     ---ContentView
     ---DrawerList 
4
Mahendran Candy

Ich hatte Probleme damit, dies zum Laufen zu bringen, und es wurde endlich richtig angezeigt. Hier ist das Layout, das ich verwendet habe:

<LinearLayout...[add your namespaces, etc]
  Android:layout_width="match_parent"
  Android:layout_height="match_parent"
  Android:orientation="vertical"
  Android:fitsSystemWindows="true">

    <Android.support.v7.widget.Toolbar [your custom toolbar] />
    <Android.support.v4.widget.DrawerLayout [your drawer layout] />
        <LinearLayout>
            [content here]
        </LinearLayout>
     <Android.support.design.widget.NavigationView />
</LinearLayout>

Achten Sie darauf, die Design-Widgets zu verschieben. Wenn sich eines unter dem falschen Root-Tag befindet, wird ein angezeigt

"Nein layout_gravity_left "

ausnahme.

1
mwieczorek

Ich habe eine einfachere Lösung gefunden: Legen Sie das Attribut DrawerLayout und NavigationView fest:

Android:fitsSystemWindows="false"

und geben Sie marginTop als Navigationsansicht ein

"?actionBarSize"

möglicherweise wird Ihr Statusleistenhintergrund in styles.xml add transparent

<item name="Android:statusBarColor">@color/colorPrimaryDark</item>

attribut, um die normale Farbe oder jede andere gewünschte Farbe zurückzubekommen ... 

0
Pemba Tamang