首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法使用StatusBar库更改MaterialDrawer颜色

无法使用StatusBar库更改MaterialDrawer颜色
EN

Stack Overflow用户
提问于 2017-03-22 12:22:09
回答 2查看 298关注 0票数 1

我试图通过编程改变StatusBar颜色,但没有成功。我正在使用MaterialDrawer库创建导航抽屉。

尝试过不同的解决方案,我在互联网上发现,但没有人工作,statusbar总是显示primaryDark

以编程方式尝试:

代码语言:javascript
复制
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
                Window window = getWindow();
                window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
                window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
                window.setStatusBarColor(Color.BLUE);
}

还尝试了以下主题:

代码语言:javascript
复制
if (dark) 
    setTheme(R.style.AppTheme_Dark_NoActionBar);
else 
    setTheme(R.style.AppTheme_NoActionBar);


<style name="AppTheme.Dark.NoActionBar" parent="MaterialDrawerTheme">
    <item name="android:colorPrimary" tools:targetApi="lollipop">#ffffff</item>
    <item name="android:colorPrimaryDark" tools:targetApi="lollipop">#cfcfcf</item>
    <item name="android:statusBarColor">#cfcfcf</item>
    <item name="android:windowDrawsSystemBarBackgrounds">true</item>
    <item name="android:windowTranslucentStatus">true</item>
    <item name="android:colorAccent" tools:targetApi="lollipop">@color/md_black_1000</item>
    <item name="android:windowContentTransitions" tools:targetApi="lollipop">true</item>
    <item name="android:windowContentOverlay">@null</item>
    <item name="drawerArrowStyle">@style/MaterialDrawer.DrawerArrowStyle.Black</item>
    <item name="android:datePickerDialogTheme">@style/DatePickerDialogThemeDark</item>
    <item name="android:timePickerDialogTheme">@style/DatePickerDialogThemeDark</item>
</style>

<style name="AppTheme.NoActionBar" parent="AppTheme">
        <item name="windowActionBar">false</item>
        <item name="android:colorAccent" tools:targetApi="lollipop">@color/primary</item>
        <item name="windowNoTitle">true</item>
        <item name="android:statusBarColor">@color/colorPrimaryDark</item>
        <item name="android:datePickerDialogTheme">@style/DatePickerDialogThemeLight</item>
        <item name="android:timePickerDialogTheme">@style/DatePickerDialogThemeLight</item>
    </style>

<style name="AppTheme" parent="MaterialDrawerTheme.Light">
    <item name="android:colorPrimary" tools:targetApi="lollipop">@color/colorPrimary</item>
    <item name="android:colorPrimaryDark" tools:targetApi="lollipop">@color/colorPrimaryDark
    </item>
    <item name="android:colorAccent" tools:targetApi="lollipop">@color/md_blue_300</item>
    <item name="android:windowContentTransitions" tools:targetApi="lollipop">true</item>
    <item name="android:windowContentOverlay">@null</item>
    <item name="android:windowDrawsSystemBarBackgrounds" tools:targetApi="lollipop">true</item>
    <item name="drawerArrowStyle">@style/MaterialDrawer.DrawerArrowStyle</item>
</style>

最后尝试使用MaterialDrawer库的这段代码:

代码语言:javascript
复制
drawer.getDrawerLayout().setStatusBarBackgroundColor(color);

drawerDrawerBuilder的结果。该应用程序有两个主颜色,取决于用户在登录/注册中输入的一些变量。这种颜色是蓝色和白色的。这个应用程序运行得很好,除了StatusBar只带有primaryDark的色彩,即使我使用我上面发布的代码。唯一可以更改颜色的模式是修改colorPrimary或将其转换为颜色:

代码语言:javascript
复制
<color name="materialize_primary_dark">@color/md_red_500</color>

但是它会像primaryDark一样改变颜色,我必须将它更改为白色模式,蓝色模式。

谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-03-23 11:31:09

一旦在具有DrawerLayout标志的View根目录中有一个fitsSystemWindows,StatusBar颜色将由该视图"scrim"管理。

因此,在您的情况下,您可以执行以下操作来动态调整StatusBar的颜色:

代码语言:javascript
复制
public void setStatusBarColor(@ColorInt int color){
    drawer.getDrawerLayout().setStatusBarBackgroundColor(color);
}
票数 2
EN

Stack Overflow用户

发布于 2017-03-23 11:48:13

您不需要使用这种样式的库-v21。

代码语言:javascript
复制
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
    <item name="android:windowNoTitle">true</item>
    <item name="android:windowDrawsSystemBarBackgrounds">true</item>
    <item name="android:windowTranslucentStatus">true</item>
</style>

抽屉布置

代码语言:javascript
复制
    <FrameLayout
        android:id="@+id/frame_container"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@color/white" />

    <android.support.design.widget.NavigationView
        android:id="@+id/navigation"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        android:background="@color/colorPrimary"
        android:fitsSystemWindows="true" /><--This is mandatory 

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

或者你可以在这里参考我接受的答案,Android DrawerLayout (带NavigationView)在状态栏后面

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

https://stackoverflow.com/questions/42951527

复制
相关文章

相似问题

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