1.UI百分比缩放

1.png

系统字体监听

1.png

2.刘海屏适配

1.png
1.png
1.png

判断是否有刘海(国内厂商独立适配)

1.png

3.沉浸式

  1. if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
  2. Window window = getWindow();
  3. View decorView = window.getDecorView();
  4. window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS|WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION );
  5. window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
  6. decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN|View.SYSTEM_UI_FLAG_LAYOUT_STABLE);
  7. decorView.setPadding(decorView.getPaddingLeft(),decorView.getTop() + getStatusBarHeight(this),decorView.getPaddingRight(),decorView.getPaddingBottom());
  8. window.setStatusBarColor(Color.TRANSPARENT);
  9. } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT){
  10. View decorView = getWindow().getDecorView();
  11. //contentView顶上去,fitsSystemWindows 为true ,会消耗部分间隙
  12. getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS|WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION );
  13. decorView.setPadding(decorView.getPaddingLeft(), decorView.getTop() + getStatusBarHeight(this), decorView.getPaddingRight(), decorView.getPaddingBottom());
  14. }

或者xml配置

  1. //19
  2. <item name="android:windowTranslucentStatus">true</item>
  3. <item name="android:windowTranslucentNavigation">true</item>
  4. //21
  5. <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