小米8刘海屏适配

Android刘海屏、水滴屏全面屏适配详解 !最后放上一个大概的Android学习方向及思路(详细的内容太多了~),提供给大家:对于程序员来说,要学习的知识内容、技术有太多太多,这里就先放上一部分,其他的内容有机会在后面的文章向大家呈现出来,不过我自己所有的学习资料都整理成了一个文档,一直在不断学习,希望能帮助到大家,也节省大家在网上搜索资料的时间来学习,也可以分享动态给身边好友一起学习!为什么某些人会一直比你优秀,是因为他本身就很优秀还一直在持续努力变得更优秀,而你是不是还在满足于现状内心在窃喜!Android架构师之路很漫长,一起共勉吧! 阅读详情

1.前言

最近在开发一个小说阅读器APP,在阅读界面碰到了适配问题,把解决问题的方法及过程记录一下。因为我只有小米8一个测试机,所以方法不保证其他手机的兼容性,只是提供一个思路,希望能给到其他人帮助。

2.全面屏适配

在Android 7.0以后,google提供了在通过在AndroidManifest.xml文件中进行声明android:resizeableActivity = “true” 来开启分屏模式的开关,且自动适应了全面屏。此外,我们可以手动设置最大屏幕宽高比。

android8.0及以上:

<activity android:maxAspectRatio="2.1">
 ...
</activity>

android7.1及以下版本:

<meta-data android:name="android.max_aspect" android:value="2.1" />

value值需要大于等于2.1,需要注意的是,如果手动进行设置了最大宽高比,一定要将多窗口模式设置为false,否则不生效。

3.刘海屏适配

从Android P开始,google提供了刘海屏适配的方案,提供了全新的 DisplayCutout 类,通过 DisplayCutout 类可以确定非功能区域的位置和形状。我们可以通过使用DisplayCutout 类中的getSafeInsetLeft ()、getSafeInsetRight ()、getSafeInsetTop ()、getSafeInsetBottom ()来分别获取安全区域距离屏幕左边、右边、上方、下方的距离,单位是px。

View decorView = getWindow().getDecorView();

decorView.post(new Runnable() {
            @Override
            public void run() {
                DisplayCutout displayCutout = decorView.getRootWindowInsets().getDisplayCutout();
                displayCutout.getSafeInsetLeft();
                displayCutout.getSafeInsetRight();
                displayCutout.getSafeInsetTop();
                displayCutout.getSafeInsetBottom();
});

除此此外,从Android P开始,google在WindowManager中新增了layoutInDisplayCutoutMode 布局参数属性,包含三种模式:

//默认情况,全屏页面不可用刘海区域,非全屏页面可以进行使用
public static final int LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT = 0;
//不允许使用刘海区域
public static final int LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER = 2;
//允许页面延伸到刘海区域
public static final int LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES = 1;

因为我需要开发的是一个小说阅读界面,使用刘海区域会导致不太美观,因此我采用了不允许使用刘海区域 的模式。

4.小米8(MIUI10)获取宽高

在开发小说阅读界面时,因为界面的绘制是通过获取屏幕的宽高来实现的,所以需要获取手机的宽和高。网上较多获取宽高的方法是通过下面实现的:

WindowManager manager = this.getWindowManager();
DisplayMetrics outMetrics = new DisplayMetrics();
manager.getDefaultDisplay().getMetrics(outMetrics);
int width = outMetrics.widthPixels;
int height = outMetrics.heightPixels;
int density = outMetrics.density;

但是使用该方法获取宽高后,在我的手机下方会出现一个黑条,很不美观。原因是因为该方法获取的是去除虚拟按键(导航栏)后的宽高,因为我的手机是使用的全面屏手势,没有使用虚拟按键,因此我们需要使用

manager.getDefaultDisplay().getRealMetrics(outMetrics);

来获取包含虚拟按键的宽高。

但是因为前面所说,我使用了不允许使用刘海屏的模式,因此会造成View下移,出现View超出屏幕的情况。我们知道是因为刘海屏的问题造成的,因此我们只需要去除刘海屏的高度便可以了。

此外,因为Build.VERSION.SDK_INT >= 28 时,才能调用官方接口,因此我们可以减去状态栏高度的方法进行适配,但是此方法仅适用于刘海屏高度小于状态栏高度的问题。

WindowManager manager = this.getWindowManager();
DisplayMetrics outMetrics = new DisplayMetrics();
manager.getDefaultDisplay().getMetrics(outMetrics);
int tempWidth = outMetrics.widthPixels;
int tempHeight = outMetrics.heightPixels;
int tempDensity = outMetrics.density;
int resourceId  = BookApp.mContext.getResources().getIdentifier("status_bar_height", "dimen", "android");
if (resourceId >0 && resourceId != null) {
    int statusBarHeight = BookApp.mContext.getResources().getDimensionPixelSize(resourceId);
    if (statusBarHeight!=null)
        tempHeight = (int)(tempHeight- (statusBarHeight / tempDensity + 0.5f)); //将dip转为px然后减去
}

 

 

国产四大厂商刘海屏适配全攻略:华为/小米/OPPO/VIVO反射调用秘籍 本文详细解析了华为、小米、OPPO和VIVO四大国产厂商的刘海屏适配方案,提供反射调用私有API的实战代码,解决Android 8.0-9.0设备上异形屏适配的核心问题,包括安全区域识别、切口尺寸获取等关键场景,帮助开发者高效实现全屏显示与内容避让。 阅读详情

相关推荐

安卓刘海屏适配(测试机型:小米8、华为p20、vivo X21、oppo R15)

安卓刘海手机适配 1、有状态栏app(也就是不需要全屏的app)无需适配 2、无状态栏全屏显示的app 需要进行刘海屏的适配 博客地址:https://blog.youkuaiyun.com/xiaoqiang_0719/article/details/80844519

Android刘海屏适配全方案(华为、小米、Vivo、Oppo)

作者 : 快乐丸 转载自 :www.jianshu.com/p/8ead0701d… 前言 目前市面上的刘海屏和水滴屏手机越来越多了,颜值方面是因人而异,有的人觉得很好看,也有人觉得丑爆了,我个人觉得是还可以。但是作为移动开发者来说,这并不是一件好事,越来越多异形屏手机的出现意味着我们需要投入大量精力在适配上(就不提之后会出的折叠屏手机了)。本文总结了当下主流手机的刘海屏适配方案,鉴于目前A...

weixin_34343308的博客 2307

SAP PS模块预算控制实战:为什么你的采购订单金额和预算占用对不上?

本文深入解析SAP PS模块中采购订单金额与预算占用偏差的常见问题,揭示承诺成本与实际成本的分流处理机制。通过实战案例和六步定位法,提供发票拆分、跨年度预算等典型场景的解决方案,并分享预防性配置框架和最佳实践,帮助企业有效控制预算偏差。

weixin_30363981的博客 516

android小米刘海屏幕适配,Android、iPhone手机刘海屏适配判断

一、简介手机屏幕的正上方居中位置(下图黑色区域)会被挖掉一个孔,屏幕被挖掉的区域无法正常显示内容,这种类型的屏幕就是刘海屏,也有其他叫法:挖孔屏、凹凸屏等等二、Android刘海屏适配判断1、判断方案目前市场上的情况来说,Android手机“刘海屏”主要分成两类:– 一类是标准的 Android P API;– 另外一类就是各手机厂商在 Android P以下的系统,做的特殊适配。针对这两类情况,...

weixin_33506920的博客 567

Python实战:5分钟搞定N-CMAPSS航空发动机数据集解析(附完整代码)

本文提供了一份针对N-CMAPSS航空发动机数据集的快速解析实战指南。通过Python的h5py和Pandas库,详细演示了如何高效读取HDF5格式文件、理解数据结构、提取关键特征(如传感器数据与剩余使用寿命RUL),并整合为可用于预测性维护分析的DataFrame,帮助研究者和工程师快速上手这一重要的工业时序数据集。

weixin_29083373的博客 280

DATCOM GUI——DATCOM-Tools使用介绍

简介 本工具以1976年美国空军稳定性与操纵性计算程序(USAF STABILITY AND CONTROL DIGITAL DATCOM PROGRAM)为基础进行开发,目的是提供更为简洁方便的外形输入方式,并带有三维绘图与气动特性输出功能。 安装与环境配置 1、 代码以Holy Cows公司提供的DATCOM程序为基础,首先下载其安装包(window,Linux均有)。 2、 安装到你想要的位置,注意不要有中文路径 3、 测试DATCOM是否能够正常运行。复制examples文件夹中的Citation

qq_40800981的博客 1万+

android兼容小米xiaomi刘海屏解决方案

Android O 刘海屏适配说明 [android 兼容huawei手机刘海屏解决方案](https://blog.youkuaiyun.com/djy1992/article/details/80683575) [android 兼容vivo手机刘海屏解决方案](https://blog.youkuaiyun.com/DJY1992/article/details/80683693)

奥特曼超人的博客专栏 4万+

如何用Deep OC-SORT提升多目标跟踪精度?实战配置与性能优化指南

本文是一份针对开发者的Deep OC-SORT多目标跟踪实战指南。详细解析了如何通过部署其核心的“动态外观记忆”与“相机防抖”模块来有效应对遮挡与抖动,从而显著提升跟踪精度与连续性。内容涵盖从环境搭建、参数调优到性能压榨的全流程,并提供针对不同场景的配置建议与工程落地技巧。

f9g0h的博客 670

Android P 刘海屏适配全攻略

本文由 玉刚说写作平台 提供写作赞助 原作者:四月葡萄 版权声明:本文版权归微信公众号 玉刚说 所有,未经许可,不得以任何形式转载 1.前言 先吐槽一下,刘海屏真丑。然而作为苦逼的开发者,还是要去适配刘海屏的。好了,吐槽完毕,进入正题。 这里主要是介绍一下Android P中刘海屏的适配以及Android P之前的适配。为什么要分开呢?因为Android P之前官方还没提供API来进行适配,...

weixin_34203426的博客 1172

接上篇,记录一下【Unity 3D对博途PLCSIM的通讯】文章有点长~仔细看,很基础

本文参考链接:西门子PLC丨PROFINET通讯仿真(虚拟通讯)做了一些更详细的优化,本文使用的类库并非原作者使用的类库。 首先,昨天项目已经创建好了,这边也加了一个InputField和一个Button,可以实现简单的读取,ok开始。 放入准备好的通讯类库; 新建一个博途的项目,本次测试使用博途V15,测试环境为虚拟机,Unity运行在本地计算机,建立博途项目流程如下: 新建项目,右键项目-属性-保护-对勾,如图: 不得不说的是,仿真中加密的FB块是无法下载的哦~ 添加CPU...

NS_Speak(IVAV) 8061

YOLOv8【第十一章:视频追踪与流处理篇·第16节】一文搞懂,DeepStream 部署入门:NVIDIA 视频分析 SDK 与 YOLOv8 结合!

🏆 本文收录于 《YOLOv8实战:从入门到深度优化》 专栏。该专栏系统复现并梳理全网各类 YOLOv8 改进与实战案例(当前已覆盖分类 / 检测 / 分割 / 追踪 / 关键点 / OBB 检测等方向),坚持持续更新 + 深度解析,质量分长期稳定在 97 分以上,可视为当前市面上 覆盖较全、更新较快、实战导向极强 的 YOLO 改进系列内容之一。

**My Coding Family** 839

android8.0 小米、vivo、oppo、华为刘海屏适配

国内手机厂商参差不齐,google官方9.0才出刘海屏适配,国内的厂商各有各的方法,苦了我们这些程序员,因此特地把它汇总起来,使用时直接复制就可。 先附上各自的官网 VIVO:https://dev.vivo.com.cn/documentCenter/doc/103 OPPO:https://open.oppomobile.com/service/message/detail?id=618...

iamZ2z的博客 2452

IDC 数据中心工程师面试题汇总

(适用于:IDC运维、机房值班、机房工程师、机柜运维、IDC基础设施、IDC网络运维岗)

老韩的Linux云计算架构师进阶之路 1081

小米8刘海适配

自从IPhone X出现刘海的设计,今年各大android手机厂商也纷纷效仿,也为自家的手机设计刘海;这不小米8就是有刘海设计的,这可苦了手机应用开发的码农了,因为各大android手机厂商,他们刘海api都不一样,需要码农每个品牌的手机都做下适配。下面简单说下小米8的适配。 1、APP开启全屏显示 首先看下官方的文档:https://dev.mi.com/console/doc/detail...

穿开裆裤的专栏 3708

基于Cesium移动的天空云

天空中的云朵也算是一种天气气候的效果,它能更加逼真的反映当前的天气状况,可以是白云朵朵,也可以是乌云密布,结合其他天气效果,可以组合形成较为真实的三维可视化场景。

星云数海的博客,一个专注GIS十多年的GISer人。 448

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Android适配刘海屏沉浸式状态栏的一些坑

在国内做Android开发真的不容易,国内的深度定制“安卓”总能时不时的给你来几个“惊喜”。 起因 18年简直是刘海元年,所有手机都在跟风刘海屏,甚至每个厂商还有自己的一套适配规范。我的初始需求很简单,就是做一个全屏现实的页面,一般情况下只需要开启Android规范的全屏模式就好: &amp;amp;amp;amp;lt;item name=&amp;amp;amp;quot;android:windowFullscreen&amp;amp;amp;quot;&am

落叶Ex的博客 1万+

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

小米8 twrp recovery_小米多机型可刷入Flyme8 daily版 Android P 全新适配-支持13款

*前言:全新Fyme8,状态栏对应刘海屏做出优化,目前整体显示较为完美!强烈建议小米9用户不要开启指纹,残废指纹解锁时闪一下最高亮度非常难受,就当你用的是iphonex,人脸解锁非常完美!官网介绍: https://www.flyme.cn我们的宗旨是: 只关闭推送,不删推广,不删推广,不冻结推广给予作者无限可能!!!适配作者Y大,ROM乐园仅做收集以下机型刷机下载:http://www.roml...

weixin_39820173的博客 2155

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Android 8刘海屏特性,Android 8.0刘海屏适配方案 小米和华为根据官方api即可获取隐藏显示转态,oppo和Vivo没有公开API...

/*** @return 判断Android O的刘海屏*/private boolean hasNotchInScreen() {boolean ret_all = false;ret_huawei = false;ret_oppo = false;ret_vivo = false;ret_xiaomi = false;// ----------------------------------...

weixin_30632267的博客 298

Android 刘海屏的适配

1、Android8.0以上的适配说明 主要说明国内外几大主流产商:小米、oppo、vivo、华为、三星、Google。 小米 MIUI Notch 屏适配说明 Notch 机型在界面上会带来两个问题: 顶部内容会被 Notch 遮挡 如何处理耳朵区的显示区域 MIUI对于Android O 和Android P的适配存在差异,尽管小米表示对这种现象的存在表示抱歉,但是由于Androi...

Painend的博客 1950

小米8 android p 公测,米粉欢呼!小米8 Android P内测9月开启

原标题:米粉欢呼!小米8 Android P内测9月开启爱搞机8月31日消息,日前,MIUI团队发布了MIUI开发版8.8.30,并且宣布,小米8因适配Android P,本周发布Android O最后一个公测开发版,预计9月初启动内测,另外小米MIX 2S正在内测Android P,期间暂停公测发布。 相比于Android 8.X,最新的Android 9 Pie最主要的变化是对“刘海屏”进行了...

weixin_42413455的博客 145

Android O(SDK 8.0)新特性,刘海屏

> Android刘海屏 Android 屏幕,16:9,17:9,19:10,18:9,18.5:9所谓全面屏。挖孔屏、凹凸屏等。 android 全面屏/刘海屏有效适配- https://blog.youkuaiyun.com/zane_xiao/article/details/81781723 详解Android刘海屏适配- https://blog.youkuaiyun.com/xiangzhiho...

ShareUs的专栏 4441

Android 8.0刘海屏适配方案 小米和华为根据官方api即可获取隐藏显示转态,oppo和Vivo没有公开API

/** * @return 判断Android O的刘海屏 */ private boolean hasNotchInScreen() { boolean ret_all = false; ret_huawei = false; ret_oppo = false; ret_vivo = false; ret_xiaomi = false; /...

Mr_Zhang_Yan的博客 1793

小米8 android p 公测,小米8 Android P内测9月开启

爱搞机8月31日消息,日前,MIUI团队发布了MIUI开发版8.8.30,并且宣布,小米8因适配Android P,本周发布Android O最后一个公测开发版,预计9月初启动内测,另外小米MIX 2S正在内测Android P,期间暂停公测发布。相比于Android 8.X,最新的Android 9 Pie最主要的变化是对“刘海屏”进行了原生适配,从系统层面更好的对刘海屏机型进行适配,以减少目前...

weixin_34342446的博客 132

MIUI Android p手势,小米8 Android P内测9月开启

爱搞机8月31日消息,日前,MIUI团队发布了MIUI开发版8.8.30,并且宣布,小米8因适配Android P,本周发布Android O最后一个公测开发版,预计9月初启动内测,另外小米MIX 2S正在内测Android P,期间暂停公测发布。相比于Android 8.X,最新的Android 9 Pie最主要的变化是对“刘海屏”进行了原生适配,从系统层面更好的对刘海屏机型进行适配,以减少目前...

weixin_39606396的博客 129
上一篇: Android开发学习之使用Toolbar实现不同的Fragment使用不同颜色的标题栏与状态栏
下一篇: 设置RecyclerView某Item背景色
Magic1an
博客等级 码龄9年 7粉丝 24原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值