刘海屏适配,其实就是知道刘海高度(横屏游戏),来对ui进行偏移
所以刘海屏适配的关键是获取刘海高度
1.大数据,收集各种型号对应的刘海数据,听说腾讯有些项目这么搞
2.代码获取,热门机型获取刘海数据,小众机型不是android p可能无法适配
NotchFit是一款Android端的刘海屏适配库,适配了O版本和P版本,它屏蔽了不同厂商不同设备不同系统版本对刘海屏适配带来的一系列的繁杂的问题。
NotchFit可以智能的判断刘海的逻辑参数,所谓的刘海逻辑参数是该库对设备刘海参数的一个抽象获取,刘海逻辑参数不单是获取设备的硬件参数,还会根据系统的设置(如小米、华为等手机可以在系统中控制刘海区域的使用与否)等条件判断当前屏幕的统一的UI布局状态,检查是否需要进行刘海适配。
下面是Github地址
https://github.com/wcl9900/NotchFit
下面是关于Unity使用NotchFit,分两部分:NotchFit库导入和适配代码
已知问题:
1.关屏幕再开屏幕导致重启问题
2.最近测试了android p版本的小米,在横屏情况下p的刘海宽度相当于o的刘海宽度,这个要处理一下
我打包测试过数据和我预想的一样,竖屏情况下返回的和安卓o版本数据一致,我们可以在NotchFit里面修改android p返回接口让他和android o返回数据一样就行,这个比较简单应该问题不大
3.关于部分安卓第一次安装完后打开游戏,点击home键后,点击图标,游戏重启问题
4.小米部分手机没有刘海适配,因为安卓o使用机型判断有4中机型没有加,可以在小米对应的刘海屏获取代码里面加
小米刘海屏具体参数
else if (TextUtils.equals(Build.MODEL, "MI 8 Explorer Edition")) {
notchSize[0] = 560;
notchSize[1] = 89;
}
else if (TextUtils.equals(Build.MODEL, "MI 8 UD")) {
notchSize[0] = 560;
notchSize[1] = 89;
}
else if (TextUtils.equals(Build.MODEL, "MI8Lite")) {
notchSize[0] = 296;
notchSize[1] = 82;
}
else if (TextUtils.equals(Build.MODEL, "POCO F1")) {
notchSize[0] = 588;
notchSize[1] = 86;
}
5.最近遇到vivo 8.0系统刘海屏无法把内容扩展到刘海那边,只能手动设置里面设置应用全屏,官方文档没有说明,目前没找到方法,我这边直接不适配刘海,返回刘海数据0不进行刘海偏移,vivo那边已经做了黑边处理
导入完成是这样
Main是适配库
MainActivity是个demo可以不看,可以不导入
导入完毕之后导入最好右键main项目属性设置编码格式,设置UTF8再执行下面操作,不然改代码是保存不了
删掉style之后AndroidManifest或报错
然后把AndroidManifest圈住的删掉
Ps:其实可以不导入MainActivity这个项目
先选个安卓版本,一定要最新的,然后把Is Library勾上
拖完之后如果发现报错就快速修复,如下图
右键属性在Library添加上面main工程,顺便也把工程使用最新的sdk
写获取刘海尺寸,获取到屏幕尺寸然后给回c#用
import com.wcl.notchfit.NotchFit;
import com.wcl.notchfit.args.NotchProperty;
import com.wcl.notchfit.args.NotchScreenType;
import com.wcl.notchfit.config.NotchConfig;
import com.wcl.notchfit.config.OnNotchPropertyListener;
import com.wcl.notchfit.core.OnNotchCallBack;
import com.wcl.notchfit.utils.LogUtils;
import com.wcl.notchfit.utils.SizeUtils;
NotchFit.fit(this, NotchScreenType.FULL_SCREEN, new OnNotchCallBack() {
public void onNotchReady(NotchProperty notchProperty)
{
if(notchProperty.isNotchEnable())
{
if(notchProperty.isNotchEnable())
{
UnityPlayer.UnitySendMessage("ScreenMgr", "OnScreenAdapation", notchProperty.isNotchEnable() + "|" + notchProperty.getNotchWidth() + "|"+notchProperty.getNotchHeight());
}
}
}
});
代码写完之后导出jar包给unity使用,jar包导出设置,只勾选src文件夹
导完之后直接打包apk测试
我这边测试华为,小米,oppo刘海屏都会返回对应的刘海数据
下面是工程下载地址
链接:https://pan.baidu.com/s/1TcfyDinQPY2P4cUIelgn9w
提取码:t8i8