首先声明一下这个叫法应该是不对的,Translucent翻译过来的是半透明效果,不是IOS的那种什么沉浸式

1. 概念

首先要明确1个概念,在android上,“沉浸式”叫沉浸式全屏模式以及透明化系统状态栏
其实这个也没啥好说的,不管你是android粉还是IOS粉,在日常玩机的过程中,都见过这种界面效果

注意图片中的红色部分,相对于传统app的黑色状态栏,这种类型app的布局是一直延伸到状态栏上

2.实现方式

强调一下,“沉浸式”仅仅支持在不低于android4.4的设备上运行,并不向下兼容。并且由于谷歌在android5.0上推出了Material Design,所以4.4跟5+实现方式并不完全一样

  • 第一种需求实现方式

在android5.0以上,官方已经提供了透明化系统状态栏的功能支持,就是将colorPrimary与colorParimaryDark设置成一致就行了

<style name="AppTheme" parent="Theme.AppCompat.NoActionBar">    -- Customize your theme here. -->    <item name="colorPrimary">@color/colorPrimary    "colorPrimaryDark">@color/colorPrimaryDark    "colorAccent">@color/colorAccentstyle>

但是在android4.4上面,实现方式略有不同,它是在透明模式下使用fitsSystemWindows将contentview移至到状态栏的下方,最后在这个空出来的地方手动添加一层view覆盖上去,达到效果

if (Build.VERSION.SDK_INT==Build.VERSION_CODES.KITKAT) {    //将状态栏设置成全透明    int bits=WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS;    if ((params.flags & bits)==0) {        params.flags |= bits;        //如果是取消全透明,params.flags &= ~bits;        window.setAttributes(params);    }    //设置contentview为fitsSystemWindows    ViewGroup viewGroup= (ViewGroup) findViewById(android.R.id.content);    viewGroup.getChildAt(0).setFitsSystemWindows(true);    //给statusbar着色    View view=new View(this);    view.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, getStatusBarHeight(this)));    view.setBackgroundColor(getResources().getColor(R.color.colorPrimary));    viewGroup.addView(view);}else if (Build.VERSION.SDK_INT>=Build.VERSION_CODES.LOLLIPOP) {    window.setStatusBarColor(getResources().getColor(R.color.colorPrimary));}

这段代码应该很好理解

  • 第二种需求实现方式

这把我们先说4.4上如何实现。其实刚才在实现第一种需求的过程中,已经做了状态栏全透明处理,只是不要移位加层并着色即可,这里不多说

android5.0上是将decorview整体变成全屏模式,并且将状态栏设置成全透明即可

if (Build.VERSION.SDK_INT>=Build.VERSION_CODES.LOLLIPOP) {    window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);    window.setStatusBarColor(Color.TRANSPARENT);    findViewById(R.id.toolbar).setBackgroundColor(Color.TRANSPARENT);}

这样,你的app就已经基本上达到了“沉浸式”的要求,是不是很简单。

3.深坑

我个人开发中写IM的过程中,遇到一个场景:底部edittext要想被软键盘弹起,contentview必须加上fitSystemWindows才能正常。第一种场景倒是没有问题,第二种场景应该怎么做呢?

更多相关文章

  1. Android监听器实现(一)Broadcast方式监听系统事件
  2. Serializable 都这么牛逼了,Parcelable 还要你何用?
  3. Android开发22——广播接收者BroadcastReceiver的原理和注册方式
  4. 酷盘PC版查看酷盘文件可以通过多种方式(Android/ios)等等
  5. [置顶] 【Android实战决】沉浸式状态栏实现(上)
  6. Android(安卓)获取wifi的加密方式
  7. 在android下出现乱码的问题(在网络中传输和获取数据时)
  8. Android中Toast的常用使用方式总结
  9. Android中圆形图的几种实现方式

随机推荐

  1. android的核心竞争力
  2. sdk 命令
  3. Android学习笔记:Android基础知识总结
  4. 解决Android 9 无法连接网络问题
  5. Android(安卓)上的低功耗蓝牙实践
  6. MPAndroidChart项目实战(五)——MPAndroidC
  7. 【Android】android的基本UI操作(1)
  8. Android Studio精彩案例(七)《ToolBar使
  9. Android之Http通信
  10. Android 开发简介