半透明/透明状态栏和导航栏

4

我希望在我的主活动中,状态栏和导航栏是半透明的,而所有其他活动使用材料设计。

到目前为止,我得到了这个:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
    Window window = this.getWindow();
    window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
    window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
} 

但结果是:

enter image description here

我甚至尝试将颜色设置为透明:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
    Window window = this.getWindow();
    window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
    window.setStatusBarColor(getResources().getColor(android.R.color.transparent));
    window.setNavigationBarColor(getResources().getColor(android.R.color.transparent));
}

但我没有得到我想要的渐变阴影,以使导航按钮和状态栏上的图标可见:

在此输入图片描述

有什么好的想法吗?

2个回答

9
我解决了这个问题。
我创建了一个模拟所需要的阴影效果的可绘制对象,并将其设置为壁纸,同时将状态栏和导航栏设为透明:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
    Window window = this.getWindow();
    Drawable background = this.getResources().getDrawable(R.drawable.background);
    window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
    window.setStatusBarColor(getResources().getColor(android.R.color.transparent));
    window.setNavigationBarColor(getResources().getColor(android.R.color.transparent));
    window.setBackgroundDrawable(background);
}

这是结果: 在此输入图片描述

1
从Android Lollipop开始,状态栏完全是半透明的,没有任何阴影。因此,您应该使用类似于#33000000的颜色来在状态栏中获得阴影。
编辑
我认为您只能为状态栏设置颜色。但是,您可以添加一个带有渐变可绘制图形的ImageView,并仅在Lollipop上显示它。状态栏高度为25dp。我认为也有一个相应的属性,但我不知道它是什么。这样,您就可以模拟状态栏中的渐变效果。

#33000000 只是给了我一个更透明的状态栏(完全黑色的13%透明度),而不是我想要的渐变色。 - Ruocco
@Jones 这是在棒棒糖上使用的代码:window.setStatusBarColor(getResources().getColor(android.R.color.transparent)); 它完全透明(#00000000),我的回答确实是黑色的13%透明度,这会产生一种阴影效果。这不是你想要的吗? - Kevin van Mierlo
不,我正在寻找一种逐渐变暗的效果,就像我们在“桌面”上看到的那种。如果我表达不清楚,对不起。 - Ruocco
1
@Jones 你是指像KitKat一样的吗?我认为你只能设置颜色。但是你可以添加一个带有渐变可绘制对象的ImageView,并且仅在Lollipop上显示它。状态栏高度为25dp。我认为也有一个属性可以控制这个,但我不知道它是什么。 - Kevin van Mierlo
是的,我的意思是最终我将状态栏和操作栏保持透明,并放置了一张模拟阴影的壁纸,因为你不能为状态栏或操作栏设置可绘制的背景。 - Ruocco
我的意思是一样的,但我的想法是两个ImageView。也很不错。你能给我点赞吗? - Kevin van Mierlo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接