web-dev-qa-db-ja.com

DrawerLayoutをツールバーの下に表示するにはどうすればよいですか?

引き出しのレイアウトをアクションバー/ツールバーの下に配置する方法は?新しいツールバービューでv7:21アプリ互換ライブラリを使用しています。

私が見る例は次のように見えます

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

しかし、ツールバーは引き出しによって非表示になり、アニメーションハンバーガーアイコン(v7.ActionBarDrawerToggleなど)は引き出しの下に表示されないため役に立たなくなりますが、マテリアルテーマをよりよくサポートするために新しいツールバービューを使用したいと思います。

それを実現する方法は? DrawerLayoutを非トップレベルビューとして使用することはできますか?

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

customtoolbarを使用するときにできるとは思わない

回避策は、top_marginを引き出しに設定することです。 (Google Playストアでも同じです!)

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

より良い解決策を見つけた場合も教えてください;)

22
EC84B4

私の解決策:Android Studio 2.1.2、引き出しテンプレート:

必要な変更は3つだけです。ビューNavigationViewでマージン上部を設定し、style.xmlでオーバーラップステータスバーを削除します。

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

Android:fitsSystemWindows="false"

レイアウト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

引き出しのレイアウトスタイルを次のように変更します

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

これを機能させるのに問題があり、最終的に正しく表示されました。私が使用したレイアウトは次のとおりです。

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

デザインウィジェットの移動には注意してください。間違ったルートタグの下にある場合は、

"番号 layout_gravity_left "

例外。

1
mwieczorek

より簡単なソリューションを見つけました:DrawerLayoutとNavigationView属性を設定します:

Android:fitsSystemWindows="false"

次に、marginTopをナビゲーションビューに

"?actionBarSize"

その場合、ステータスバーの背景がstyles.xml addで透明になります

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

通常の色または必要な他の色を取得する属性...

1
Pemba Tamang