如何将背景颜色设置为透明状态栏

Posted

技术标签:

【中文标题】如何将背景颜色设置为透明状态栏【英文标题】:How to set background color to transparent status bar 【发布时间】:2016-11-06 23:19:26 【问题描述】:

是否可以通过编程方式更改透明状态栏的背景颜色?

我已使用以下代码将状态栏设置为透明,因此我也可以将导航抽屉放在状态栏中,而状态栏不会与导航抽屉重叠。

<item name="android:windowDrawsSystemBarBackgrounds">true</item>
<item name="android:statusBarColor">@android:color/transparent</item>

状态栏的背景颜色取自

&lt;item name="colorPrimaryDark"&gt;@color/primary_dark&lt;/item&gt;

是否可以通过编程方式更改此颜色并使状态栏仍然透明?

我尝试过使用

window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
window.setStatusBarColor(statusBarColor);

但状态栏上面有一层难看的黑色纱布,我不想要。

还有其他方法可以以编程方式存档吗?我需要能够在运行时更改颜色。此外,每种颜色都有不同的样式也不是一种选择,因为用户应该能够选择颜色。

编辑:这就是我在使用setStatusBarColor(int); 更改其颜色时与导航抽屉重叠的状态栏的意思。我仍然希望导航抽屉与状态栏重叠。

【问题讨论】:

您已经将颜色设置为透明,因此您不能在透明条上设置其他颜色。 @OnkarNene 但没有办法改变透明度以下的颜色吗?设置primaryDark也会改变它,所以即使它是透明的,也必须有办法改变它。 【参考方案1】:

这样使用。

// Check if the version of Android is Lollipop or higher
if (Build.VERSION.SDK_INT >= 21) 

    // Set the status bar to dark-semi-transparentish
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS,
            WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);



更新日期:

代替

<item name="android:statusBarColor">@android:color/transparent</item>

使用以下内容:

<item name="android:windowTranslucentStatus">true</item>

更新日期2:

styles.xml

 <style name="AppTheme.NoActionBar">
        <item name="windowActionBar">false</item>
        <item name="windowNoTitle">true</item>
        <item name="android:windowDrawsSystemBarBackgrounds">true</item>
        <item name="android:statusBarColor">@android:color/transparent</item>
 </style>

colors.xml

 <color name="colorPrimary">#0072BA</color>
 <color name="colorPrimaryDark">#004F80</color>
 <color name="colorAccent">#005D96</color>

输出:

没有抽屉

带抽屉

【讨论】:

不幸的是,这确实在状态栏顶部留下了黑色的稀松布,这不是我想要的。 颜色看起来比应有的颜色要深,因为 android 在使用 WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS 时会在其顶部应用深色。此外,我实际上只是在问题中写道,我已经尝试过,但没有奏效。 再说一次,这确实会在状态栏上留下深色的稀松布,使我的颜色看起来比应有的颜色更深 现在如何在不修改xml的情况下更改状态栏颜色? 我想以编程方式设置状态栏的背景颜色,它应该像图片上一样,上面没有任何深色纱布,也没有与导航抽屉重叠。

以上是关于如何将背景颜色设置为透明状态栏的主要内容,如果未能解决你的问题,请参考以下文章

如何让状态栏透明,文字颜色为灰色?

如何使状态栏透明,文本颜色为灰色?

android 透明状态栏方法及其适配键盘上推

导航栏颜色不在状态栏下

无法将状态栏颜色更改为半透明黑色 [重复]

更改状态栏的背景颜色