Android 状态栏下的材质设计抽屉:如何使用带有两个框架布局的抽屉布局作为子项来实现它?

Android 状态栏下的材质设计抽屉:如何使用带有两个框架布局的抽屉布局作为子项来实现它?,android,android-layout,android-fragments,navigation-drawer,material-design,Android,Android Layout,Android Fragments,Navigation Drawer,Material Design,我目前正在设置导航抽屉,以遵循材料设计规范。我已经检查了(在中可用)并制作了其中列出的所有实现,如自定义主题等,但它们似乎都不符合我的应用程序结构的要求 正如您从标题中猜到的,我的抽屉布局有两个框架布局作为子项:一个用于内容,另一个用于抽屉(需要指出的是,我无法更改此结构,因为我需要保持以友好方式更新NavigationDrawer中的内容的能力,并且显然要保持将片段交换为主要内容的能力) 现在的问题是,我不知道在哪里放置xml中的工具栏声明,以实现预期的设计,同时又不会弄糟一切,因为抽屉布局需

我目前正在设置导航抽屉,以遵循材料设计规范。我已经检查了(在中可用)并制作了其中列出的所有实现,如自定义主题等,但它们似乎都不符合我的应用程序结构的要求

正如您从标题中猜到的,我的
抽屉布局
有两个
框架布局
作为子项
:一个用于内容,另一个用于抽屉(需要指出的是,我无法更改此结构,因为我需要保持以友好方式更新NavigationDrawer中的内容的能力,并且显然要保持将片段交换为主要内容的能力)

现在的问题是,我不知道在哪里放置xml中的工具栏声明,以实现预期的设计,同时又不会弄糟一切,因为
抽屉布局需要两个子项

活动\u main.xml


给出以下结果: 如你所见,由于内容是全屏绘制的,所以状态栏似乎完全不存在(可能是正确的?)。当应用程序启动时,我可以看到工具栏被绘制(呈现时没有状态栏填充,从而弄乱了系统图标)然后突然被地图内容覆盖了。我目前运行的是安卓4.4.4,但在安卓5.0的模拟器上也是一样的

在另一个stackoverflow问题中,建议将根
线性布局
与工具栏和
抽屉布局
放在一起,但会导致奇怪的结果,例如正确呈现工具栏,但使用状态栏(具有坚实的不透明背景)我还尝试使用
FrameLayout
作为根目录,结果很差

有关于如何处理此问题的建议吗?


<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/drawer_layout"> 

<LinearLayout
    android:id="@+id/someLayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <android.support.v7.widget.Toolbar
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:id="@+id/toolbar"
        android:layout_height="wrap_content"
        android:layout_width="match_parent"
        android:minHeight="?attr/actionBarSize"
        android:background="?attr/colorPrimary" 
        app:theme="@style/ThemeOverlay.AppCompat.ActionBar" />
     <FrameLayout android:id="@+id/container"></FrameLayout>

</LinearLayout>

<com.myapp.widget.ScrimInsetsFrameLayout
    android:id="@+id/navigation_drawer"
    android:layout_width="@dimen/navdrawer_width"/>
</android.support.v4.widget.DrawerLayout>
现在您只需在R.id.container中更改片段,因为container位于someLayoutLinearLayout的工具栏下


我使用了一些布局参数,但这不是重点。

你的活动主题/风格是什么?它是theme.AppCompat.Light.NoActionBar,带有false、true,对于值v19也是true。你使用的是“NoActionBar”主题,但你想拥有ActionBar/工具栏?所以使用“theme.AppCompat.Light.darkaActionBar”即检查以下内容:要将工具栏用作操作栏,请首先禁用装饰提供的操作栏。最简单的方法是从theme.AppCompat.NoActionBar(或其灯光变体)扩展主题。"所以你需要的是工具栏上有而默认使用的ActionBar没有谢谢,这个解决方案正确地显示了工具栏,导航抽屉也正确地重叠了工具栏。但是有一个问题:它在屏幕上呈现的东西太高了,因为它在呈现所有东西时没有考虑系统m状态栏填充!有什么建议吗?我终于找到了接近修复的地方:我在这里检查了这个问题,我发现用FrameLayout包装所有内容并将其设置为FitsystemWindows=“true”(以及ScrimInsetsFrameLayout)使所有内容都正确渲染。现在我在状态栏的颜色方面遇到了一些问题,但那是另一回事了…无论如何,谢谢!
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/drawer_layout"> 

<LinearLayout
    android:id="@+id/someLayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <android.support.v7.widget.Toolbar
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:id="@+id/toolbar"
        android:layout_height="wrap_content"
        android:layout_width="match_parent"
        android:minHeight="?attr/actionBarSize"
        android:background="?attr/colorPrimary" 
        app:theme="@style/ThemeOverlay.AppCompat.ActionBar" />
     <FrameLayout android:id="@+id/container"></FrameLayout>

</LinearLayout>

<com.myapp.widget.ScrimInsetsFrameLayout
    android:id="@+id/navigation_drawer"
    android:layout_width="@dimen/navdrawer_width"/>
</android.support.v4.widget.DrawerLayout>