首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >安卓NavigationView (物料支持库)与状态栏交互不正常

安卓NavigationView (物料支持库)与状态栏交互不正常
EN

Stack Overflow用户
提问于 2015-05-30 06:13:28
回答 3查看 3.4K关注 0票数 17

我正在按照here的例子将新的Material Design Support库的NavigationView集成到我的应用程序中。

我的总体布局如下所示:

activity.xml

代码语言:javascript
复制
<android.support.v4.widget.DrawerLayout
    android:fitsSystemWindows="true">

    <!-- main content -->

    <android.support.design.widget.NavigationView
        .. />

</android.support.v4.widget.DrawerLayout>

themes.xml

代码语言:javascript
复制
<style name="MyTheme" extends "Theme.AppCompat.Light.NoActionBar">
    <item name="android:statusBarColor">@android:color/transparent</item>
    <item name="android:windowDrawsSystemBarBackgrounds">true</item>
</style>

MyActivity.java

代码语言:javascript
复制
onCreate(..) {
    ..
    // This color can be different depending on some conditions.
    DrawerLayout.setStatusBarBackground(color);
}

但是,我一直得到一个灰色的状态栏,并且NavigationView不会在状态栏下绘制。我认为出现灰色状态栏是因为我没有在主题中定义自定义的colorPrimaryDark属性。但是,我假设DrawerLayout.setStatusBarBackground会覆盖并设置状态栏的颜色。我找不到很多关于新NavigationView的文档。有谁有什么想法吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-06-02 03:41:48

叹息,我发现我的问题了。有一些奇怪的抽象,我们用来在右边添加一个调试抽屉。因此,整个视图层次结构实际上如下所示

代码语言:javascript
复制
<DrawerLayout id="debug">

    <LinearLayout id="debug_drawer" />

    <DrawerLayout id="nav_drawer" fitsSystemWindows="true">

        <NavigationView .... />

    </DrawerLayout>

</DrawerLayout>

所以我在错误的抽屉上调用了DrawerLayout.setStatusBarColor,并在错误的抽屉上设置了fitsSystemWindows。因此,窗口从不与状态栏交互:(

票数 3
EN

Stack Overflow用户

发布于 2015-05-30 19:08:59

在values-v21/ 21+中添加您的接口样式:

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="MyTheme" parent="Theme.AppCompat.Light.NoActionBar">
        <item name="android:statusBarColor">@android:color/transparent</item>
        <item name="android:windowDrawsSystemBarBackgrounds">true</item>
    </style>
</resources>

在activity.xml中,尝试在NavigationView上设置android:fitsSystemWindows="true" (除了DrawerLayout之外)。

票数 7
EN

Stack Overflow用户

发布于 2015-06-22 09:32:32

对于每个在这个问题上苦苦挣扎的人,你的布局文件应该是这样的:

代码语言:javascript
复制
<android.support.v4.widget.DrawerLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/drawer_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true">

    ...

    <android.support.design.widget.NavigationView
        android:id="@+id/nav_view"
        android:layout_height="match_parent"
        android:layout_width="wrap_content"
        android:layout_gravity="start"
        android:fitsSystemWindows="true"
        app:headerLayout="@layout/drawer_header"
        app:menu="@menu/menu_drawer"/>

</android.support.v4.widget.DrawerLayout>

你必须包括

代码语言:javascript
复制
android:fitsSystemWindows="true"

在DrawerLayout和NavigationView中。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30539874

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档