gpt4 book ai didi

android - 动态改变状态栏颜色而不失去透明度

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:34:58 26 4
gpt4 key购买 nike

我知道我可以使用 colorPrimary 来确定 Toolbar 的颜色,并使用 colorPrimaryDark 来确定状态栏的颜色。

我正在使用以下主题

<!-- Base application theme. -->
<style name="Theme.Noteplus.Base.Brown" parent="Theme.AppCompat.Light.DarkActionBar">

<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimaryLight</item>
<item name="colorPrimaryDark">#ff0000</item>

<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>

其中一个有趣的属性是,当我滑出导航菜单时,状态栏自动变为透明。


在运行时,有时我想改变状态栏的颜色。

setTitle("Recycler bin");
toolbar.setBackgroundColor(Color.BLUE);
getWindow().setStatusBarColor(Color.parseColor("#5694FF"));

如下所示

不幸的是,当我们滑出导航菜单时,调用setStatusBarColor,也会丢失状态栏的透明度属性。

我可以知道,如何在运行时更改状态栏颜色而不丢失其透明度属性吗?对于我的情况,在运行时将状态栏更改为蓝色后,当我滑出抽屉导航时,我希望看到状态栏透明度属性被保留。


更新

我试过了

private void setStatusBarColor(int color) {
if (Build.VERSION.SDK_INT >= 21) {
Window window = getWindow();
window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
window.setStatusBarColor(color);
}
}

当抽屉导航滑出时,提供透明度属性没有帮助。

最佳答案

您正在使用 DrawerLayout。这意味着,而不是使用 Window#setStatusBarColor(int)你应该使用 DrawerLayout#setStatusBarBackground() 之一过载。

您的代码的等价物如下:


ColorDrawable colorDrawable = new ColorDrawable(0xFF5694FF);
drawerLayout.setStatusBarBackground(colorDrawable);

我对可以使用 Android Studio 向导创建的模板应用程序进行了细微更改:

enter image description here

关于android - 动态改变状态栏颜色而不失去透明度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50201477/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com