web-dev-qa-db-fra.com

Comment puis-je faire en sorte que DrawerLayout soit affiché sous la barre d'outils?

Comment faire pour que la disposition du tiroir soit en dessous de la barre d’action/barre d’outils? J'utilise la bibliothèque d'applications v7: 21 avec la nouvelle vue ToolBar.

Les exemples que je vois ressemblent

<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>  

Mais la barre d’outils sera cachée par le tiroir, ce qui rendra inutile l’icône d’une hamburger animée (comme v7.ActionBarDrawerToggle), car elle ne sera pas visible sous le tiroir, mais je souhaite utiliser la nouvelle vue ToolBar pour mieux prendre en charge le thème Matériau.

Alors, comment y arriver? Est-il possible d'avoir DrawerLayout en tant que vue non supérieure?

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
Alexander Mamutov

je ne pense pas que vous puissiez le faire lorsque vous utilisez custom toolbar

mais un contournement consisterait à définir un top_margin sur tiroir .

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

si vous avez trouvé une meilleure solution, dites-moi aussi;)

22
EC84B4

Ma solution: générer un modèle avec Android Studio 2.1.2, un modèle de tiroir:

Seulement trois modifications sont nécessaires: définir la marge supérieure dans la vue NavigationView et supprimer la barre de statut de recouvrement dans style.xml 

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

Android:fitsSystemWindows="false"

layout main.xml set margin top obtenir la valeur size de la barre d'action 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

Changez le style de votre tiroir comme ci-dessous

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

J'ai trouvé une solution plus simple: Définir les attributs DrawerLayout et NavigationView:

Android:fitsSystemWindows="false"

puis donnez marginTop à la vue de navigation comme

"?actionBarSize"

peut-être que votre fond de barre de statut deviendra transparent dans ce cas dans styles.xml, ajoutez

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

attribuer à récupérer la couleur normale ou toute autre couleur que vous voulez ... 

0
Pemba Tamang