如何将背景颜色设置为透明状态栏
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>
状态栏的背景颜色取自
<item name="colorPrimaryDark">@color/primary_dark</item>
是否可以通过编程方式更改此颜色并使状态栏仍然透明?
我尝试过使用
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的情况下更改状态栏颜色?
我想以编程方式设置状态栏的背景颜色,它应该像图片上一样,上面没有任何深色纱布,也没有与导航抽屉重叠。以上是关于如何将背景颜色设置为透明状态栏的主要内容,如果未能解决你的问题,请参考以下文章