Unity快速适配IOS/安卓刘海屏(又简单又快 适配了O版本和P版本)

刘海屏适配,其实就是知道刘海高度(横屏游戏),来对ui进行偏移

所以刘海屏适配的关键是获取刘海高度

获取刘海高度有三种方案

1.大数据,收集各种型号对应的刘海数据,听说腾讯有些项目这么搞

2.代码获取,热门机型获取刘海数据,小众机型不是android p可能无法适配

3.unity新版本提供了相关刘海屏适配

 

新版unity刘海屏适配(推荐)

Screen.safeArea获取刘海屏信息适用于安卓9.0或以上系统(抛弃8.0奇葩刘海),ios是可以使用

安卓8.0可以使用配置表,因为机型不会非常多(直接不适配8.0最方便)

如果不想适配,刘海直接黑边处理,把Render outside safe area取消就可以

安卓

1.刘海旁边都要填充内容

需要获取safeArea来进行偏移,然后Render outside safe area打上勾

2.刘海直接黑边处理

Render outside safe area不打勾就行

IOS

需要获取safeArea来进行偏移就可以

 

下面是代码获取刘海数据

       NotchFit是一款Android端的刘海屏适配库,适配了O版本和P版本,它屏蔽了不同厂商不同设备不同系统版本对刘海屏适配带来的一系列的繁杂的问题。

     NotchFit可以智能的判断刘海的逻辑参数,所谓的刘海逻辑参数是该库对设备刘海参数的一个抽象获取,刘海逻辑参数不单是获取设备的硬件参数,还会根据系统的设置(如小米、华为等手机可以在系统中控制刘海区域的使用与否)等条件判断当前屏幕的统一的UI布局状态,检查是否需要进行刘海适配。

下面是Github地址

https://github.com/wcl9900/NotchFit

下面是关于Unity使用NotchFit,分两部分:NotchFit库导入和适配代码

其实这个库可以导出aar作为插件来处理(思路告诉你,实现靠自己)

安卓接入部分不懂可以看这个链接(最后获取刘海高度用到的)

 

已知问题:

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那边已经做了黑边处理

6.最近发现安卓10没有自动全屏应用,在mainactivity加入onCreate下面代码就可以触发全屏,具体什么意思百度应该就有

        if (Build.VERSION.SDK_INT >= 28) {
            WindowManager.LayoutParams params = getWindow().getAttributes();
            params.layoutInDisplayCutoutMode = WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES;
            getWindow().setAttributes(params);
        }

 

第一部分:导入库

1.先下载NotchFit然后解压出来

2.打开eclipse工程(我的工程基于上面安卓接入的工程)在工程下面右键->import

3.这里找到刚刚解压的NotchFit,然后勾选copy projects into workspace

导入完成是这样

Main是适配库

MainActivity是个demo可以不看,可以不导入

导入完毕之后导入最好右键main项目属性设置编码格式,设置UTF8再执行下面操作,不然改代码是保存不了

4.main工程报错解决 把main的AndroidManifest圈住的删掉

 

5.MainActivity报错解决,先把styles删掉

删掉style之后AndroidManifest或报错

然后把AndroidManifest圈住的删掉

Ps:其实可以不导入MainActivity这个项目

6.然后点击main工程右键Properties

先选个安卓版本,一定要最新的,然后把Is Library勾上

7.把main的java里面的com文件夹拖到src文件夹

拖完之后如果发现报错就快速修复,如下图

8.最后导入库到工程里面

右键属性在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 

评论 13
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值