Android 5.0半透明状态栏

时间:2015-02-07 10:47:42

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

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

我已经经历了很多stackoverflow的答案,包括使用ScrimInsetsFrameLayout,但似乎没有什么能像按照确切的规则那样简单地实现

  

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

1 个答案:

答案 0 :(得分:1)

可以使用xml完成​​。使用framelayout以便您可以将两个或更多图像视图添加到其中。