在不影响导航栏的情况下使状态栏透明
Make status bar transparent without affecting navigation bar
我有这段代码可以使状态栏透明:
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);
}
}
但这也使导航栏透明,使我的视图占据了它下面的 space
like this. 有什么办法可以只让状态栏透明吗?
从 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);
}
请注意,以这种方式将其设置为全屏不会隐藏导航栏。要隐藏导航栏,您必须研究沉浸式全屏模式。
最后的注释
这最后的说明是为了确保我是安全的:
如果您所说的导航栏是指操作栏(屏幕顶部带有应用 name/other 文本的栏,在状态栏下方),则不受此影响。要影响操作栏,请更改 colorPrimary。
重要提示
即使你把bar设置为透明,如果下面没有任何渲染,它会显示主题的颜色(背景色)或黑色(因为那里没有任何东西,所以显示黑色)
我有这段代码可以使状态栏透明:
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);
}
}
但这也使导航栏透明,使我的视图占据了它下面的 space like this. 有什么办法可以只让状态栏透明吗?
从 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);
}
请注意,以这种方式将其设置为全屏不会隐藏导航栏。要隐藏导航栏,您必须研究沉浸式全屏模式。
最后的注释
这最后的说明是为了确保我是安全的:
如果您所说的导航栏是指操作栏(屏幕顶部带有应用 name/other 文本的栏,在状态栏下方),则不受此影响。要影响操作栏,请更改 colorPrimary。
重要提示
即使你把bar设置为透明,如果下面没有任何渲染,它会显示主题的颜色(背景色)或黑色(因为那里没有任何东西,所以显示黑色)