【问题标题】:Transparent Status bar android透明状态栏android
【发布时间】:2017-09-07 06:31:36
【问题描述】:

我试过了

statusBarColor设置为透明,但会留下阴影

windowTranslucentStatus 设置为 true,但会留下阴影

将上述属性与fitsSystemWindow混合匹配...没有成功

做到以下几点就达到了状态完全透明的目的……同时也让导航栏完全透明

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

如何在不触摸导航栏的情况下仅使状态栏 100% 透明

minSdk: 21

目标:26

编译 26

Android studio 3.0 预览版(截至 2017 年 9 月 6 日最新)

【问题讨论】:

  • 这个solution 可能会有所帮助。
  • 可以分享截图吗

标签: android android-statusbar android-navigation-bar


【解决方案1】:

我认为你不能让状态栏 100% 透明,因为 Activity 有自己的窗口背景(默认背景是白色,你可以使用 getWindow().setBackgroundDrawableResource(int resID) 或 getWindow() 设置窗口背景。 setBackgroundDrawable(Drawable drawable))

您可以在 setContentView() 之后以十六进制形式设置颜色到状态栏并设置颜色不透明度,如下面代码所示。

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
        getWindow().addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
        getWindow().setStatusBarColor(Color.parseColor("#00FFFFFF"));
    }

//Here "#00FFFFFF" means opacity is 0% (first two digits 00) and colour is white (next FFFFFF character).

或在 styles.xml 中(仅限棒棒糖后版本。兼容性可能会受到影响)

    <item name="android:windowDrawsSystemBarBackgrounds">true</item>
    <item name="android:statusBarColor">@android:color/transparent</item>

关于设置不透明度请参考this链接

【讨论】:

  • 将 alpha 设置为 0 仍然会提供阴影。我想一种选择是使状态栏和导航栏都透明,并在导航栏应该去的地方添加带有颜色的栏。不过好像很便宜
  • 当您将 alpha 设置为 0 时,默认显示窗口背景颜色为白色(窗口背景根据父主题更改)。
  • 哦,是的,你是对的。我打开了 fitSystemWindows,但我没有看到你添加的那个标志,以为是另一个标志。谢谢!
  • 什么鬼......不再起作用了。不知道发生了什么。修复后会报告
  • @John 检查您正在应用的主题。如果您将其他主题应用于其他活动,那么您必须再次进行这些更改。我认为它应该工作
【解决方案2】:

在状态栏中使用此十六进制颜色#00000000

【讨论】:

    【解决方案3】:

    我只是在同样的条件下做了同样的事情

    您对 FLAG_LAYOUT_NO_LIMITS 的看法是对的,但它就是这样(kotlin 中的代码)

    //onCreate
    window.setFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS, WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS)
    toolbar.setPadding(0, getStatusBarHeight(), 0, 0)
    

    getStatusBarHeight:

    private fun getStatusBarHeight(): Int {
        var result = 0
        val resourceId = resources.getIdentifier("status_bar_height", "dimen", "android")
        if (resourceId > 0) {
            result = resources.getDimensionPixelSize(resourceId)
        }
        return result
    }
    

    以及如何返回导航栏 - 将其放入您的样式中:

        <item name="android:windowTranslucentStatus">false</item>
        <item name="android:windowDrawsSystemBarBackgrounds">false</item>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-04-07
      • 1970-01-01
      • 1970-01-01
      • 2015-07-06
      • 2017-07-07
      • 2013-07-17
      相关资源
      最近更新 更多