沉浸式状态栏是从IOS流行起来的,毕竟整个界面设计的比较完美话,上面有个白条的话比较违和。然后android也慢慢流行起来。所以较早版本的android不支持沉浸式状态栏。

我们先看一下如果不设置状态栏的app界面(theme为NoActionBar):

是不是看到上面的状态栏比较违和?

样式一:

实现代码如下:

        if (Build.VERSION.SDK_INT >= 21) {            View decorView = getWindow().getDecorView();            int option = View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN                    | View.SYSTEM_UI_FLAG_LAYOUT_STABLE;            decorView.setSystemUiVisibility(option);            getWindow().setStatusBarColor(Color.TRANSPARENT);        }        // 如果theme是NoActionBar或者NoActionBar的子theme,如果添加下面两行代码会报异常//        ActionBar actionBar = getSupportActionBar();//        actionBar.hide();

然后我们看一下效果图,就会发现另一个问题:titleBar覆盖了状态栏

下一步我们要测量一下状态栏的高度并且设置titleBar的位置,实现代码如下:
测量状态栏的高度:

    private int getStatusBarHeight() {        Class<?> clazz = null;        Object obj = null;        Field field = null;        int x = 0;        try {            clazz = Class.forName("com.android.internal.R$dimen");            obj = clazz.newInstance();            field = clazz.getField("status_bar_height");            x = Integer.parseInt(field.get(obj).toString());            return getResources().getDimensionPixelSize(x);        } catch (Exception e) {            e.printStackTrace();            return 75;        }    }

动态设置titleBar的位置:

   int statusBarHeight = getStatusBarHeight();   Log.e("yushan", "statusBarHeight:" + statusBarHeight);   title = (RelativeLayout)findViewById(R.id.title);   RelativeLayout.LayoutParams lp = (RelativeLayout.LayoutParams) title.getLayoutParams();   lp.topMargin = statusBarHeight;   title.setLayoutParams(lp);

最后咱们再看一下效果图:

哒哒,现在的效果是不是看着比较舒服~当然,有少数需求会把底部导航栏也渲染成同样的背景,实现代码如下:

        if (Build.VERSION.SDK_INT >= 21) {            View decorView = getWindow().getDecorView();            int option = View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION                    | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN                    | View.SYSTEM_UI_FLAG_LAYOUT_STABLE;            decorView.setSystemUiVisibility(option);            getWindow().setNavigationBarColor(Color.TRANSPARENT);            getWindow().setStatusBarColor(Color.TRANSPARENT);        }        // 如果theme是Theme.AppCompat.Light.NoActionBar或者子theme,如果添加下面两行代码会报异常//        ActionBar actionBar = getSupportActionBar();//        actionBar.hide();

效果图咱们就不贴了,可以自己运行一下看看。注意:沉浸式状态栏要在android5.0以上才会实现
这里道长找了一个4.2的机子运行了一下,效果图如下:

样式二

当然还有的应用感觉状态栏也没有必要展示,比如一些视频播放类应用。实现代码如下:

    @Override    public void onWindowFocusChanged(boolean hasFocus) {        super.onWindowFocusChanged(hasFocus);        if (hasFocus && Build.VERSION.SDK_INT >= 19) {            View decorView = getWindow().getDecorView();            decorView.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_STICKY);        }    }

效果图如下:

关于沉浸式状态栏就说这么多吧,一般这么多就可以应对绝大多数需求了。希望这篇博客能够为小伙伴们提供一些帮助。

更多相关文章

  1. Android(安卓)高手进阶教程(十四)之----Android(安卓)Location的
  2. Android单元测试之Robolectric
  3. 修正AppCompatSpinner弹出框位置问题
  4. Android内容提供者使用及创建
  5. Android网络请求框架AsyncHttpClient (android-async-http)介绍
  6. Android(安卓)10个快速开发框架:Afinal、ThinkAndroid、AndBase、
  7. Android系统的启动流程
  8. 转:编写高效的Android代码
  9. 解决eclipse中执行程序提示“Your project contains error(s),ple

随机推荐

  1. Android硬件加速问题
  2. Android如何监听开机广播和关机广播
  3. Android 系统简介
  4. android 中 多个Activity 的跳转 与传值
  5. ImageView之android:tint=" "属性方法作
  6. Google code android开源项目(四)
  7. Android中各种JAVA包的功能描述
  8. Android焦点分发基本流程
  9. android局部更新(RecyclerView+ DiffUtil
  10. Android安全机制