刘海屏之全面屏攻略
前言
由于苹果公司的“先进设计”导致各大手机厂商纷纷跟风其设计,导致Android的屏幕适配出现新的刚需——刘海屏的适配。为了简化这些适配操作以及繁琐的判断封装优化出一个工具库:BangScreenToolsMaster
适配方案及原理
适配流程
AndroidP的适配方式:
AndroidP及以上的方式必须适用于sdk大于等于28的情况下使用。
显示模式: Android P中新增了一个布局参数属性 |
|
LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT | 只有当DisplayCutout完全包含在系统栏中时,才允许窗口延伸到DisplayCutout区域。 否则,窗口布局不与DisplayCutout区域重叠 |
LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER | 不使用刘海屏区域 |
LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES | 该窗口始终允许延伸到屏幕短边上的DisplayCutout区域。 |
方法 | 接口描述 |
getBoundingRects() | 返回Rects的列表,每个Rects都是显示屏上非功能区域的边界矩形。 |
getSafeInsetLeft () | 返回安全区域距离屏幕左边的距离,单位是px。 |
getSafeInsetRight () | 返回安全区域距离屏幕右边的距离,单位是px。 |
getSafeInsetTop () | 返回安全区域距离屏幕顶部的距离,单位是px。 |
getSafeInsetBottom() | 返回安全区域距离屏幕底部的距离,单位是px。 |
AndroidP以下的华为适配方案:
使用新增的meta-data
属性android.notch_support
。在应用的AndroidManifest.xml
中增加meta-data
属性,此属性不仅可以针对Application
生效,也可以对Activity
配置生效。
如下所示:
<meta-data android:name="android.notch_support" android:value="true"/>
- 对
Application
生效,意味着该应用的所有页面,系统都不会做竖屏场景的特殊下移或者是横屏场景的右移特殊处理。 - 对
Activity
生效,意味着可以针对单个页面进行刘海屏适配,设置了该属性的Activity
系统将不会做特殊处理。
华为的适配使用了反射相关操作代码如下:
//判断是否是华为手机
public final boolean isHuaWei() {
String manufacturer = Build.MANUFAC