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

2023-10-27

刘海屏适配,其实就是知道刘海高度(横屏游戏),来对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 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • 软件测试的基本概念

    目录 一 什么是需求 二 什么是测试用例 三 什么是BUG 四 开发模型和测试模型 1 软件开发生命周期 2 软件开发的五大模型 2 1 瀑布模型 2 2螺旋模型 2 3增量模型 迭代模型 2 4 敏捷模型 3 软件测试的两大模型 3 1
  • 一个登录案例学会 Pinia

    Pinia 号称下一代的 Vuex 经过初步体验 发现相比于 Vuex Pinia 确实有了很大进步 最明显的就是删减了复杂的概念 简化了数据流转的过程 现在只剩下了 store state getters actions 这四个核心概念
  • 小白学习python——numpy

    零 初识numpy 1 numPy Numerical Python 即数值Python包 是Python进行科学计算的一个基础包 所以是一个掌握其他Scipy库中模块的基础模块 一定需要先掌握该包的主要使用方式 官网 http www n
  • 猿创征文

    内存管理实现单链表的插入和删除 1 收获 2 什么是单链表 3 节点的创建 4 主函数的实现 5 子函数的实现 5 1 AollocNode的实现 5 2 HeadInsertNode的实现 5 3 ShowNode的实现 5 4 Head
  • KB2871997补丁绕过

    KB2871997补丁绕过 微软为了防止用户的明文密码在内存中泄露 发布了KB2871997补丁 关闭了Wdigest功能 Windows Server2012及以上版本默认关闭Wdigest 使攻击者无法从内存中获取明文密码 Window
  • 24. 两两交换链表中的节点

    给你一个链表 两两交换其中相邻的节点 并返回交换后链表的头节点 你必须在不修改节点内部的值的情况下完成本题 即 只能进行节点交换 输入 head 1 2 3 4 输出 2 1 4 3 示例 2 输入 head 输出 示例 3 输入 head
  • php 验证只能输入姓名,php 检查输入用户名是否符合规定示例

    这篇文章主要为大家详细介绍了php 检查输入用户名是否符合规定示例 具有一定的参考价值 可以用来参考一下 对php检查输入的用户名是否符合规定感兴趣的小伙伴 下面一起跟随512笔记的小编两巴掌来看看吧 php检查输入的用户名是否符合规定 p

随机推荐

  • 【热门框架】Mybatis-Plus条件查询的三种格式

    Mybatis Plus 提供了三种常用的条件查询方式 分别是 Wrapper QueryWrapper LambdaQueryWrapper Wrapper Wrapper 是一个接口 提供了若干个构造方法 可以用来构建 where 条件
  • C++可变参数模板

    可变参数模板 接受可变数目参数的模板函数或模板类 将可变数目的参数成为参数包 有模板参数包和函数参数包 模板参数包 表示零个或多个模板参数 函数参数包 表示零个或多个函数参数 例如 template
  • 数据挖掘note(1)

    数据挖掘一般分为机器学习和统计学习 大数据学的课程一般是关于机器学习 我们学的浅 主要关于统计学习 示意图如下所示 这是一个大数据时代 但是数据挖掘的利用率不足0 5 可见数据挖掘的空间巨大 问题 数据挖掘对信息安全有什么用 例如从几十万条
  • VTM2.0+360lib-7.0配置环境

    全景视频编码跟普通的视频编码不一样 在VTM平台下还需要配置一个360lib 这里贴一下VTM和360lib的地址 VTM下载地址 360lib下载地址 提示一下 VTM可以直接在网站上下载zip版本 360lib要svn的方法下载 下载下
  • 戏开发unity编译和调试系列:The type or namespace name ‘NativeList<>‘ could not be found

    The type or namespace name NativeList lt gt could not be found are you missing a using directive or an assembly referenc
  • intellij idea如何将基于Springboot的web项目打成war包

    intellij idea如何将基于Springboot的web项目打成war包 详细内容请参看 https ms200 cn p 791
  • flink接入Kafka报错:timeout expired while fetching topic metadata

    简单的flink接入kafka结果报错 代码 create env val env StreamExecutionEnvironment getExecutionEnvironment set parallelism env setPara
  • 测试员不可不知的几款bug管理工具

    根据每个公司性质的不同 规模的不同 所用到的bug管理工具也可能不同 你们用的bug管理工具是什么呢 下面介绍几款主流的bug管理工具 1 JIRA 付费 JIRA JIRA的生产者把JIRA定义为Professional Issue Tr
  • Git:Git中的分支管理

    文章目录 分支是什么 创建分支 分支切换 合并分支 删除分支 合并冲突 合并模式 分支策略 bug分支 强制删除分支 本篇主要总结的是Git中的分支管理 分支是什么 在Git中 一个强大的功能就是分支 由前面的学习可以知道 当我们每次进行c
  • Java中double精度丢失如何处理

    图片来自网络 代码审查 CodeReview 是一种可以有效提高代码质量的方法 他可以帮助团体提高产品代码质量 提高产品的稳定性 更容易维护的代码会带来更少的技术债务 从整体上看 提高了软件开发和迭代的效率 double精度丢失现象 程序开
  • HashMap面试相关问题

    1 HashMap的底层实现原理 HashMap的底层是数组 链表的方式 通过Hash算法决定每个元素的存储位置 当程序执行map put 方法时 系统会调用hashcode 方法来得到他的hash值 通过hash值来确定该元素的存储位置
  • 网络基础:路由器工作原理

    目录 一 理论 1 路由器工作原理 2 路由表获取方式 3 路由器和交换机的区别 二 实验 1 华为系统配置2台路由器 2 华为系统配置3台路由器 3 华为系统配置浮动路由 一 理论 1 路由器工作原理 路由器工作在OSI七层协议中的第三层
  • AD画PCB时如何修改编辑区(黑色部分)

    今天同事提出这个问题 心中暗喜 又到我发光的时候了 结果 WHAT 没研究明白 小姐姐明明之前会N种方法的呀 赶紧问度娘 问题解决 应该是ad不同版本指令不太一样了 方法一 直接在KEEPOUT层画出想要的板框大小 方向 选中状态 执行DE
  • linux C错误汇集

    问题一 22 c In function main 22 c 8 9 error empty character constant 解决方法 少了空格 问题2 没有连接到math函数库 gcc 12 c o 12 lm 问题3 segmen
  • 如何在Cocos2d-x中集成安卓版微信SDK

    本文转载于 http www cocoachina com bbs read php tid 224616 1 概述 微信的火热程度已不必说了 如果能在Cocos2d x中集成微信SDK 让游戏能分享给好友或者朋友圈 那对游戏推广将会是非常
  • QT引入及基本介绍

    文章目录 嵌入式项目的图形解决方案 QT 跨平台的实现 qmake vs cmake base class QWidget QMainWindow QDialog kits Hello World 创建项目 hello pro项目文件 ui
  • img标签及属性

    一 img标签 1 img标签的作用 用来告诉浏览器我们需要显示一张图片 2 img标签格式 img src img标签中的src是英文source的缩写 src 是用来告诉img标签 需要显示的图片名称 3 注意点 和H系列标签 P标签
  • C语言每日一练——第133天:打鱼还是晒网

    前言 Wassup guys 我是Edison 今天是C语言每日一练 第133天 Let s get it 文章目录 1 问题描述 2 题目分析 3 算法设计 4 流程框架 求出指定日期距离 5 代码实现 1 问题描述 中国有句俗语叫 三天
  • java中统计一个字符串中出现最多的字符和次数

    用Map来存储被拆分成数组的字符串 key为字符 value为出现次数 package net hncu other import java io UnsupportedEncodingException import java util
  • Unity快速适配IOS/安卓刘海屏(又简单又快 适配了O版本和P版本)

    刘海屏适配 其实就是知道刘海高度 横屏游戏 来对ui进行偏移 所以刘海屏适配的关键是获取刘海高度 获取刘海高度有三种方案 1 大数据 收集各种型号对应的刘海数据 听说腾讯有些项目这么搞 2 代码获取 热门机型获取刘海数据 小众机型不是and