【问题标题】: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);

但它不起作用。状态栏只是改变了颜色,变成了灰色,不透明。我的错误在哪里?如何让状态栏透明?

【问题讨论】:

标签: android android-5.0-lollipop android-statusbar


【解决方案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);

【讨论】:

  • 同样的结果:状态栏变成灰色,但不透明。
猜你喜欢
  • 1970-01-01
  • 2014-01-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-06
  • 2014-12-31
相关资源
最近更新 更多