45

Come rendere la disposizione dei cassetti al di sotto della barra delle azioni/barra degli strumenti? Sto usando la libreria compatibile app v7: 21 con la nuova vista ToolBar.Come faccio a rendere DrawerLayout per visualizzare sotto la barra degli strumenti?

esempi che vedo assomiglia

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

Ma poi la barra degli strumenti sarà nascosto dal cassetto, il che rende un'icona hamburger animato (come v7.ActionBarDrawerToggle) inutile dal momento che non sarà visibile sotto il cassetto, ma voglio usare la nuova vista ToolBar per supportare meglio il tema Materiale.

Quindi, come farlo? È possibile avere DrawerLayout come una vista non di primo livello?

+2

http://www.journaldev.com/12648/navigati onview-android – AnupamChugh

+0

Questo potrebbe aiutare http://www.gadgetsaint.com/android/android-navigation-drawer-toolbar/#.WOBABBJ97fY – ASP

+0

@AnupamChugh - il link che hai fornito sopra (** journaldev.com/12648/navigationview- Android **) è davvero quello che stavo cercando. Grazie!! –

risposta

93
<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> 
+4

Benvenuti in SO! Per favore aggiungi qualche spiegazione alla tua risposta. –

+2

Questo lo ha fatto per me, sembra così ovvio una volta implementato. La barra degli strumenti deve essere posizionata sul layout del cassetto piuttosto che all'interno, tuttavia gli esempi di un cassetto sugli sviluppatori Android hanno il cassetto nella radice poiché la barra delle azioni per impostazione predefinita sarebbe stata sopra le righe. – NathofGod

+0

Questo ha funzionato anche per me. Ha senso - dal momento che la barra degli strumenti è considerata parte della gerarchia ora (al contrario della vecchia barra di azione), il posizionamento effettivo nel layout diventa più importante. –

21

non credo che quando si può utilizza personalizzatotoolbar

ma un lavoro in giro sarebbe quello di impostare un top_margin a cassetto. (la stessa cosa su Google Play Store!)

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

se hai trovato una soluzione migliore mi dica troppo;)

+3

Una soluzione che sembra funzionare è riordinare il layout, utilizzando LinearLayout come layout, con ToolBar e DrawerLayout come child. – user1309971

+1

questa è la soluzione migliore. Grazie amico – Darsh

+1

Risolvi il mio problema ... Grazie .. – Ironman

5

Cambia Il tuo cassetto stile di layout come come di seguito

RelativeLayout 
----Toolbar 
----DrawerLayout 
    ---ContentView 
    ---DrawerList 
1

Ho avuto problemi nel far funzionare tutto, e alla fine è stato visualizzato correttamente. Ecco il layout che ho usato:

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

Fare attenzione spostare i widget di design in giro, se uno è sotto il tag radice sbagliato, si otterrà un

"no layout_gravity_left"

eccezione.

4

La mia soluzione: generare modello con Android 2.1.2 Studio, modello cassetto:

bisogno solo tre modifiche: Margine superiore impostato in vista NavigationView ed eliminare overloap barra di stato in style.xml

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

android:fitsSystemWindows="false" 

il layout margine prestabilito main.xml superiore ottenere dimensioni valore ActionBar 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> 
+0

Il ** false ** l'impostazione di stile funziona solo con API Livello 21 e versioni successive. Codigo sempre le mie app sulla base dell'API Livello 17. Quindi questa soluzione non funziona per me ... –

+0

Prova a inserire valori-21/styles.xml – Webserveis

+0

Funziona per la mia app API Livello 17 quando la metti in * * values-21/styles.xml ** ma la parte superiore della finestra di sistema non segue più il tema dell'app ma ha uno sfondo nero che non è sicuramente l'aspetto che voglio per l'app. Ho provato questa soluzione ** https: //www.journaldev.com/12648/navigationview-android** e funziona perfettamente per me. –