使状态栏透明而不影响导航栏

时间:2017-04-01 12:38:48

标签: android android-statusbar

我有这个使状态栏透明的代码:

private void setTransparentStatusBar() {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
            Window window = getWindow();
            window.setFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS, WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
        }
}

但这也使导航栏变得透明,使我的视图占据了它下面的空间 like this.有没有办法让状态栏透明?

1 个答案:

答案 0 :(得分:1)

从styles.xml中,您可以执行以下操作:

<style name="transparent" parent="Theme.AppCompat.Light">//AppCompat is the key; You can choose any other theme than the light-theme, but stick to AppCompat

    <item name="colorPrimaryDark">#00000000</item>//THIS is the important part.
    //Other styling(optional)
</style>

我做的是将colorPrimaryDark设置为透明(这就是为什么有8位而不是6位:透明度设置在前2位)。这会将状态栏的颜色设置为透明。

然后将其应用于您的布局,只需在根布局(视图)中添加以下行:

android:theme="@style/transparent"

将布局的主题设置为我上面显示的样式,将colorPrimaryDark(状态栏的颜色)设置为透明。它仍然显示时间,通知等内容,但它没有颜色。

现在,如果你想隐藏状态栏,你可以这样做:

    if (Build.VERSION.SDK_INT < 16) {
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                WindowManager.LayoutParams.FLAG_FULLSCREEN);
    } 

请注意,以这种方式将其设置为全屏不会隐藏导航栏。要隐藏导航栏,您必须进入沉浸式全屏模式。

最终注释

最后一点是为了确保我明白:

如果您通过导航栏表示操作栏(屏幕顶部,状态栏下方有应用名称/其他文本的栏),则不受此影响。要影响操作栏,请更改colorPrimary。

重要提示

即使您将条形设置为透明,如果下面没有任何内容呈现,它将显示主题的颜色(背景颜色)或黑色(因为没有任何内容,它显示黑色)