我知道我可以使用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);
}
}
导航抽屉滑出时,提供透明度属性并不会有帮助。
答案 0 :(得分:5)
您正在使用DrawerLayout
。这意味着,您应该使用Window#setStatusBarColor(int)
重载之一,而不是使用DrawerLayout#setStatusBarBackground()
。
代码的等价物如下:
ColorDrawable colorDrawable = new ColorDrawable(0xFF5694FF);
drawerLayout.setStatusBarBackground(colorDrawable);
我已对可以使用Android Studio向导创建的模板应用程序进行了少量更改:
答案 1 :(得分:0)
我猜你的透明度问题不是关于你使用的方法,而是关于颜色本身!
您正在使用此getWindow().setStatusBarColor(Color.parseColor("#5694FF"));
尝试使用RGBA代替RGB,使其透明,应该是这样的:
getWindow().setStatusBarColor(Color.parseColor("#5694FF80"));
答案 2 :(得分:0)
private void changeStatusBarColor(String 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.parseColor(color));
}
}
如果您在此处检查堆栈溢出,那么在该行代码之前将状态栏的透明度设置为实心
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS)