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

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

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

获取刘海高度有两种方案

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

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

这次我介绍的是代码获取刘海数据

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

 

第一部分:导入库

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

Unity快速适配安卓刘海屏(又简单又快 适配了O版本和P版本)_第1张图片

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

Unity快速适配安卓刘海屏(又简单又快 适配了O版本和P版本)_第2张图片

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

Unity快速适配安卓刘海屏(又简单又快 适配了O版本和P版本)_第3张图片

导入完成是这样

Main是适配库

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

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

Unity快速适配安卓刘海屏(又简单又快 适配了O版本和P版本)_第4张图片

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

Unity快速适配安卓刘海屏(又简单又快 适配了O版本和P版本)_第5张图片

 

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

Unity快速适配安卓刘海屏(又简单又快 适配了O版本和P版本)_第6张图片

删掉style之后AndroidManifest或报错

然后把AndroidManifest圈住的删掉

Unity快速适配安卓刘海屏(又简单又快 适配了O版本和P版本)_第7张图片

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

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

Unity快速适配安卓刘海屏(又简单又快 适配了O版本和P版本)_第8张图片

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

Unity快速适配安卓刘海屏(又简单又快 适配了O版本和P版本)_第9张图片

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

Unity快速适配安卓刘海屏(又简单又快 适配了O版本和P版本)_第10张图片

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

Unity快速适配安卓刘海屏(又简单又快 适配了O版本和P版本)_第11张图片

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

右键属性在Library添加上面main工程,顺便也把工程使用最新的sdk

Unity快速适配安卓刘海屏(又简单又快 适配了O版本和P版本)_第12张图片

Unity快速适配安卓刘海屏(又简单又快 适配了O版本和P版本)_第13张图片

第二部分

写获取刘海尺寸,获取到屏幕尺寸然后给回c#用

Unity快速适配安卓刘海屏(又简单又快 适配了O版本和P版本)_第14张图片

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文件夹

Unity快速适配安卓刘海屏(又简单又快 适配了O版本和P版本)_第15张图片

导完之后直接打包apk测试

我这边测试华为,小米,oppo刘海屏都会返回对应的刘海数据

下面是工程下载地址

链接:https://pan.baidu.com/s/1TcfyDinQPY2P4cUIelgn9w 
提取码:t8i8 

你可能感兴趣的:(适配)