状态栏透明度不起作用

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);

【讨论】:

同样的结果:状态栏变成灰色,但不透明。

以上是关于状态栏透明度不起作用的主要内容,如果未能解决你的问题,请参考以下文章

导航抽屉在状态栏上半透明不起作用

透明导航栏不起作用(呈半透明蓝色)

Android半透明主题不起作用

ios PWA 中的黑色半透明不起作用

iOS透明uitabbar不起作用

引导导航栏活动状态不起作用