我有这个使状态栏透明的代码:
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.有没有办法让状态栏透明?
答案 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。
即使您将条形设置为透明,如果下面没有任何内容呈现,它将显示主题的颜色(背景颜色)或黑色(因为没有任何内容,它显示黑色)