1.UI百分比缩放
系统字体监听
2.刘海屏适配
判断是否有刘海(国内厂商独立适配)
3.沉浸式
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {Window window = getWindow();View decorView = window.getDecorView();window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS|WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION );window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN|View.SYSTEM_UI_FLAG_LAYOUT_STABLE);decorView.setPadding(decorView.getPaddingLeft(),decorView.getTop() + getStatusBarHeight(this),decorView.getPaddingRight(),decorView.getPaddingBottom());window.setStatusBarColor(Color.TRANSPARENT);} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT){View decorView = getWindow().getDecorView();//contentView顶上去,fitsSystemWindows 为true ,会消耗部分间隙getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS|WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION );decorView.setPadding(decorView.getPaddingLeft(), decorView.getTop() + getStatusBarHeight(this), decorView.getPaddingRight(), decorView.getPaddingBottom());}
或者xml配置
//19<item name="android:windowTranslucentStatus">true</item><item name="android:windowTranslucentNavigation">true</item>//21<item name="android:windowDrawsSystemBarBackgrounds">true</item>
4.View.setSystemUiVisibility
1)View.SYSTEM_UI_FLAG_FULLSCREEN:
视图全屏并隐藏状态栏,当用户交互时(如下滑状态栏)会恢复隐藏的状态栏(例子:电子书阅读)缺点:进入Activity会产生一个从非全屏到全屏的闪动效果
2)View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY:
粘性沉浸模式,需要和SYSTEM_UI_FLAG_FULLSCREEN或者SYSTEM_UI_FLAG_HIDE_NAVIGATION联用,当View.setSystemUiVisibility(View.SYSTEM_UI_FLAG_FULLSCREEN|View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY)联用时视图全屏,当用户产生交互时(如下滑状态栏)不会恢复状态栏,只会以半透明的方式覆盖在视图上面并在一定时间内自动消失
3)View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN:
视图全屏且不会产生闪动,状态栏会覆盖在视图上面
4)View.SYSTEM_UI_FLAG_LAYOUT_STABLE:
使视图稳定,当使用fitSystemWindows()(下面会单独介绍这个方法)需要视图稳定,一般和View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN联用
5.Window.addFlags()及其各种Flags
1)FLAG_TRANSLUCENT_STATUS:
Android4.4系统增加的属性,它会使状态栏透明透明并且自动执行View.SYSTEM_UI_FLAG_LAYOUT_STABLE和View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
2)FLAG_FULLSCREEN:
视图全屏并隐藏状态栏,效果相当于View.SYSTEM_UI_FLAG_FULLSCREEN+View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY,并且视图稳定(不会因为系统控件的变化(如输入法),而重新布局)
3).FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS:
Android5.0系统以上支持,如果设置了该属性,系统栏(状态栏和导航栏)将以透明背景绘制,并且该窗口中的相应区域将填充setStatusBar()和setNavigationBarColor()中设置的颜色
6.View#setFitsSystemWindows
此方法只有当设置SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN或者SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION才有有效,当窗口发生变化时,View需要调整自身内容以适应窗口的变化,你可以理解为当和SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN一起联用的时候,是给View加了个bottomTop属性,宽度填充视图,高度就是状态栏的高度;当和SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION一起联用的时候,是给View加了个bottomBottom属性,宽度填充视图,高度就是导航栏的高度,建议给布局的顶层ViewGroup使用
7.Window#setStatusBarColor()
Android5.0系统及以上开始支持,设置状态栏的颜色,为了使这个状态有效必须要设置FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS而且不能设置FLAG_TRANSLUCENT_STATUS


