【Unity】工具类系列——UI刘海屏适配
刘海屏适配
项目上线了总免不了适配问题,
注:该方案支持热更适配,哪怕是上线项目也可以及时开启适配及调整适配程度。
原理:
通过获取设备型号及计算屏幕分辨率,在根据是否刘海屏调整侧边按钮的 Anchored Position 偏移量,从而避过刘海遮挡。
```csharp
using System;
using System.Collections;
using System.Collections.Generic;
using Sirenix.OdinInspector;
#if UNITY_EDITOR
using Sirenix.Utilities.Editor;
using UnityEditor;
#endif
using UnityEngine;[ExecuteAlways]
public class UI_NotchAdapter : MonoBehaviour
{public enum AdapterType{ePosY_Minus_AdaptY,eOffsetMaxY_Minus_AdaptY,eSizeDeltaY_Set_AdaptY,eSizeDeltaY_Minus_AdaptY,}[System.Serializable]public class UI_NA_Data{[LabelText("需要适配的UI对象")]public RectTransform mRectTransform_;[LabelText("适配方式")]public AdapterType mAdapterType_;}[ListDrawerSettings(ShowIndexLabels = true, Expanded = true), LabelText("屏幕适配数据"), ShowInInspector]public List<UI_NA_Data> mAdaptDatas_ = new List<UI_NA_Data>();private void Awake(){}private void OnDestroy(){}void DoAdapterLogic(bool preview = false){if (mAdaptDatas_ != null){for (var i = 0; i < mAdaptDatas_.Count; ++i){var data = mAdaptDatas_[i];if (data != null){GameManager gm = null;if (!preview)gm = GameManager.Instance;switch (data.mAdapterType_){case AdapterType.ePosY_Minus_AdaptY:{if (data.mRectTransform_ != null){var mPos = data.mRectTransform_.transform.localPosition; data.mRectTransform_.transform.localPosition = new Vector3(mPos.x, mPos.y - gm.MNotchAdaptY_, mPos.z);}}break;case AdapterType.eSizeDeltaY_Minus_AdaptY:{if (data.mRectTransform_ != null){var rSize = data.mRectTransform_.sizeDelta;data.mRectTransform_.sizeDelta = new Vector2(rSize.x, rSize.y - gm.MNotchAdaptY_);}}break;case AdapterType.eSizeDeltaY_Set_AdaptY:{if (data.mRectTransform_ != null){var rSize = data.mRectTransform_.sizeDelta;data.mRectTransform_.sizeDelta = new Vector2(rSize.x, gm.MNotchAdaptY_);}}break;case AdapterType.eOffsetMaxY_Minus_AdaptY:{if (data.mRectTransform_ != null){var rectTop = data.mRectTransform_.offsetMax.y;var rectRight = data.mRectTransform_.offsetMax.x;data.mRectTransform_.offsetMax = new Vector2(rectRight, rectTop - gm.MNotchAdaptY_);}}break;}}}}}// Start is called before the first frame updatevoid Start(){if (Application.isPlaying){DoAdapterLogic();}}
}
将该代码挂到需要调整的适配的ui上,需要注意的是gm.MNotchAdaptY_是刘海屏的高度,需要自己设置更换。
使用如下:
拖动对应的对象,选好适配方式即可
【Unity】工具类系列——UI刘海屏适配相关推荐
- Android刘海屏适配全方案(华为、小米、Vivo、Oppo)
前言 目前市面上的刘海屏和水滴屏手机越来越多了,颜值方面是因人而异,有的人觉得很好看,也有人觉得丑爆了,我个人觉得是还可以.但是作为移动开发者来说,这并不是一件好事,越来越多异形屏手机的出现意味着我们 ...
- Android刘海屏适配精炼详解
一.前期基础知识储备 话不多说,这么多刘海屏手机今年集中爆发,所以尽管刘海屏不好看,但是还是要适配. 2017年苹果X开启了刘海屏时代,2018年集中爆发,纷纷采取刘海屏这一策略来实现全面屏的概念(看 ...
- Android 系统(70)---Android刘海屏适配方案
Android刘海屏适配方案 什么是刘海屏 随着iPhone X发布,国内一些厂商也推出了刘海屏手机,即将发布的Android p也提供了对刘海屏的支持.so,我们的app也要提前做好适配. 屏幕的正 ...
- 详解Android刘海屏适配
Apple一直在引领设计的潮流,自从 iPhone X 发布之后,"刘海屏" 就一直存在争议,本以为是一个美丽的错误(Bug),却早就了一时间"刘海屏"的模仿潮 ...
- Android刘海屏适配
Android刘海屏适配 全屏模式下刘海屏黑边(内容区域下挫)问题,支持国国内 华为,小米,OPPO/VIVIO 非原生9.0系统的刘海屏 刘海屏是Android9.0之后才支持的 详见源码 andr ...
- android刘海屏手机专业术语叫什么,Android刘海屏适配精炼详解
一.前期基础知识储备 image 话不多说,这么多刘海屏手机今年集中爆发,所以尽管刘海屏不好看,但是还是要适配. 2017年苹果X开启了刘海屏时代,2018年集中爆发,纷纷采取刘海屏这一策略来实现全面 ...
- Android P版本 刘海屏适配 与WindowInsets,DisplayCutout使用
Android P版本的发布,引入了刘海屏的概念,像华为nova 3e,vivo X21等手机厂商也纷纷推出自己的刘海屏手机,我们先预览下HUAWEI nova 3e的机照 从这张图中我们可以看出,所 ...
- Android P刘海屏适配介绍
1. 背景 Apple一直在引领设计的潮流,自从iPhone X发布之后,刘海屏就一直存在争议.不过不管你怎样,Android也要跻入"刘海屏"的行列,Android P预览版 ...
- h5 iOS 刘海屏适配
之前做app内嵌页时,按照机型做了齐刘海适配,到现在iPhone12发布后,发现ios 齐刘海机型很多,所以按照机型适配有点繁琐,统一修改如下. 先看一下各个机型以及分辨率:https://www.t ...
最新文章
- sudo 密码超时时间
- python 将counter 的结果转换为字典
- java socket 如何设置so_keepalive属性_socket通信的KeepAlive设定
- 亲测有用的markdown博客生成器
- 静态变数和非静态变数_统计资料:了解变数
- 坑爹BUG,没有详细的看还真看不出问题
- HM 内存池设计(2) HM6.0内存池设计
- 深度模型推理在腾讯游戏的应用与实践(王者荣耀、和平精英等均有应用)
- PX4位置估计源码分析
- 计算机 无法 访问共享网络打印机,共享打印机无法连接怎么办解决方案
- 程序员最喜欢的五大神器
- Lazy Binomial Heaps
- 新春将至,“牛”气冲天
- 如何通过划分VLAN,有效规划企业网ip地址!
- 二叉树的前序遍历(Java)
- 问卷调查样本量的确定方法
- 《Python编程 从入门到实践》简单读书笔记
- 自考计算机及应用什么顺序,我想在北京自考计算机及应用专科考过的前辈给我点经验?...
- 岭南师范学院专插本计算机,2020年岭南师范学院专插本招生计划出来了,共招250人...
- 男脸型测试配发型软件,男士测脸型配发型app 百度拍照测脸型