Android 5.0 半透明状态栏

Posted

技术标签:

【中文标题】Android 5.0 半透明状态栏【英文标题】:Android 5.0 translucent status bar 【发布时间】:2015-04-07 12:09:34 【问题描述】:

从https://developer.android.com/training/material/theme.html#StatusBar 开始,我在如何让状态栏透明方面经历了很多不同的尝试和错误,但运气不佳。

我不想要导航抽屉,只是一个平面和带有半透明状态栏的简单活动,就像它们在 http://www.google.com/design/spec/style/imagery.html#imagery-best-practices 上显示的那样

这是我的设计

        <style name="AppTheme" parent="android:Theme.Material.NoActionBar">
        <!-- All customizations that are NOT specific to a particular API-level can go here. -->
        <item name="android:windowActionBar">false</item> 
                <!--   your app branding color for the app bar -->
        <item name="android:colorPrimary">@android:color/transparent</item>
        <!--   darker variant for the status bar and contextual app bars -->
        <item name="android:colorPrimaryDark">@android:color/transparent</item>
        <item name="android:statusBarColor">@android:color/transparent</item>
                <item name="android:fitsSystemWindows">true</item>

        <item name="android:windowDrawsSystemBarBackgrounds">true</item>
        <item name="android:windowTranslucentStatus">true</item>
        <item name="android:windowTranslucentNavigation">true</item>
                     <item name="android:windowNoTitle">true</item> 
         <item name="android:windowBackground">@android:color/transparent</item>
<item name="android:windowContentOverlay">@null</item>


    </style>

和java中的代码

        getWindow().setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS,
            WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
    getWindow().getAttributes().flags &= (~WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
    getWindow().setStatusBarColor(Color.TRANSPARENT);

    getWindow().getDecorView().setSystemUiVisibility(
            View.SYSTEM_UI_FLAG_LAYOUT_STABLE
          | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
          | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
          | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
          | View.SYSTEM_UI_FLAG_FULLSCREEN
          | View.SYSTEM_UI_FLAG_IMMERSIVE);

我已经经历了很多 *** 的答案,包括使用 ScrimInsetsFrameLayout,但似乎没有什么能像遵循确切的规则那样简单

您也可以自己在状态栏后面画图。例如,如果您想在照片上透明地显示状态栏,并使用微妙的深色渐变来确保白色状态图标可见。为此,请将 android:statusBarColor 属性设置为 @android:color/transparent 并根据需要调整窗口标志。您还可以将 Window.setStatusBarColor() 方法用于动画或淡入淡出。注意:状态栏应该几乎总是与主工具栏有一个清晰的轮廓,除非您在这些栏后面显示边缘到边缘的丰富图像或媒体内容,以及当您使用渐变以确保图标仍然可见时.

【问题讨论】:

【参考方案1】:

这可以使用 xml 来完成。使用 framelayout 以便您可以在其中添加两个或多个 imageview。

【讨论】:

以上是关于Android 5.0 半透明状态栏的主要内容,如果未能解决你的问题,请参考以下文章

Android:半透明状态栏不适用于 Google Maps API

Android 沉浸式/透明式状态栏、导航栏

Android中的半透明状态栏

利用 Android 4.4 KitKat 中的半透明状态栏

利用 Android 4.4 KitKat 中的半透明状态栏

android 4.4 的标签和半透明状态栏/导航出现问题