状态栏透明度不起作用
Posted
技术标签:
【中文标题】状态栏透明度不起作用【英文标题】:Status bar transparency doesn't work 【发布时间】:2016-01-25 10:59:48 【问题描述】:我正在尝试使用此代码在我的应用程序中使状态栏透明:
getWindow().addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
getWindow().setStatusBarColor(Color.TRANSPARENT);
但它不起作用。状态栏只是改变了颜色,变成了灰色,不透明。我的错误在哪里?如何让状态栏透明?
【问题讨论】:
您也许可以查看我以前的答案之一:***.com/a/33986302/3426717 【参考方案1】:在你的styles.xml(v21)
试试这个
<name="android:windowDrawsSystemBarBackgrounds">true</item>
<item name="android:windowTranslucentStatus">true</item>
更新
您可以在 KitKat 上以编程方式实现相同的效果,然后通过设置此窗口标志
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT)
Window w = getWindow(); // in Activity's onCreate() for instance
w.setFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS, WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
如果您为布局设置背景资源(如颜色或图片),您将在状态栏“下方”看到颜色或图片。
<item name="android:windowDrawsSystemBarBackgrounds">true</item>
<item name="android:statusBarColor">@color/primary_dark</item>
Source
【讨论】:
正在 +19 设备上进行测试?使用此解决方案的最终结果是什么? 是的,带有 Android 5.1.1 的 Nexus 5。状态栏变为灰色,但不透明。 使用getWindow().setFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS, WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
它可以工作。谢谢!
这些标志不起作用的原因是什么?有什么想法吗?【参考方案2】:
尝试从 onCreate 调用它:
getWindow().getDecorView().setSystemUiVisibility(
View.SYSTEM_UI_FLAG_LAYOUT_STABLE
| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
getWindow().setStatusBarColor(Color.TRANSPARENT);
【讨论】:
同样的结果:状态栏变成灰色,但不透明。以上是关于状态栏透明度不起作用的主要内容,如果未能解决你的问题,请参考以下文章