Android状态栏--实现状态栏全透明

一、概述

   最近项目中要求实现一个状态栏全透明的效果,先来两张效果图。

首页效果图:
Android状态栏--实现状态栏全透明_第1张图片
其它界面效果图:
Android状态栏--实现状态栏全透明_第2张图片

如上面两图所示,一个Activity中的两个Fragment的状态栏分别显示不同的效果。
主要思路就是把状态栏变透明,把标题栏弄没。

二、实现

实现方法有两种,一种是在布局中设置,另一种是在代码中设置。
Android4.4以下的系统无法对状态栏进行操作,所以本文针对Android4.4系统和Android5.0及以上系统进行说明。
对于Android4.4系统和Android5.0及以上系统,首先都要先在styles.xml中设置主题样式,先去掉标题栏,要添加以下两行代码:

<item name="windowActionBar">falseitem>
<item name="windowNoTitle">trueitem>

我这里直接在默认主题AppTheme中添加了:

对于Android4.4系统:
可以新建“values-v19/styles.xml”文件,添加代码:

也可以不设置android:windowTranslucentStatus属性为true,改为在Activity中添加以下代码:

getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);

对于Android5.0及以上系统:
可以新建“values-v21/style.xml”文件,添加代码跟Android4.4系统一样:

但是这样显示出来的状态栏是半透明的,要想实现全透明,可以在Activity中进行设置,添加代码:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
    Window window = getWindow();            
    window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
    window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
    window.setStatusBarColor(Color.TRANSPARENT);            
    window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE);
    }

对于以上这些方法,不能在相关的布局文件中设置fitsSystemWindows为true,不然整个布局会向下移动一个状态栏高度的距离,状态栏还是会显灰白色呈现出来。

三、后记

刚开始写博客,有些不足希望不要在意,并且这篇文章也有很多可以补充的地方,今后有时间可能会补充上去。
在其它界面存在EditText时,点击EditText弹出虚拟键盘后回到首页,又出现了状态栏显灰白色的情况,如下图所示:
Android状态栏--实现状态栏全透明_第3张图片
解决办法是在AndroidManifest.xml文件中给对应的Activity设置windowSoftInputMode属性值为adjustPan或者adjustNothing即可

后记(二)

Android6.0系统以上可以给状态栏文字颜色改成黑色,代码如下:

public static void setStatusBarMode(Activity activity, boolean bDark) {
        //6.0以上
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            Window window = activity.getWindow();
            View decorView = window.getDecorView();

            if (decorView != null) {
                int vis = decorView.getSystemUiVisibility();

                if (bDark) {
                    vis |= View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR;
                    window.setStatusBarColor(activity.getResources().getColor(R.color.white));

                } else {
                    vis &= ~View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR;
                    window.setStatusBarColor(activity.getResources()
                                              .getColor(R.color.colorPrimaryDark));
                }
                decorView.setSystemUiVisibility(vis);
            }
        }
    }

添加View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR属性就能使状态栏文字颜色变黑,移除变回原样

你可能感兴趣的:(Android状态栏--实现状态栏全透明)