android 布局 横屏 android横屏适配

一、刘海屏适配
1、layoutInDisplayCutoutMode属性
Android 9.0系统中提供了3种layoutInDisplayCutoutMode属性来允许应用自主决定该如何对刘海屏设备进行适配。

LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT
这是一种默认的属性,在不进行明确指定的情况下,系统会自动使用这种属性。这种属性允许应用程序的内容在竖屏模式下自动延伸到刘海区域,而在横屏模式下则不会延伸到刘海区域。
LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES
这种属性表示,不管手机处于横屏还是竖屏模式,都会允许应用程序的内容延伸到刘海区域。
LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER 这种属性表示,永远不允许应用程序的内容延伸到刘海区域。
2、配置layoutInDisplayCutoutMode的方式

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {window.attributes.layoutInDisplayCutoutMode = WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES
}



layoutInDisplayCutoutMode使用默认值,即我们不去设置。即使我们不做任何的适配工作,绝大多数的程序在默认情况下也是可以自动适配刘海屏手机的,并不会产生应用程序无法使用等问题的发生。

但是,假如你开发的是一款视频类应用或者游戏的话(横屏显示),充分利用屏幕的空间明显可以带来更好的用户体验,界面上留着一条大黑边对用户总归是不够友好的。这个时候我们就可以通过指定layoutInDisplayCutoutMode属性的值,来让应用程序具备更好的屏幕适配性。
 
 

红色箭头处有条大黑边。如果我们将layoutInDisplayCutoutMode设置为LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES,大黑边就会消失。并且设置沉浸式布局

override fun onWindowFocusChanged(hasFocus: Boolean) {super.onWindowFocusChanged(hasFocus)if (hasFocus && Build.VERSION.SDK_INT >= 19) {val decorView = window.decorViewdecorView.systemUiVisibility = (View.SYSTEM_UI_FLAG_LAYOUT_STABLEor View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATIONor View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREENor View.SYSTEM_UI_FLAG_HIDE_NAVIGATIONor View.SYSTEM_UI_FLAG_FULLSCREENor View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY)}
}


 3、需要适配的地方
但是界面上交互的一些按键可能被刘海挡住,这样用户就不能点击了。

我们左边的按键被刘海挡住一部分。这种情况就需要我们进行适配了。DisplayCutout类主要用于获取凹口位置和安全区域的位置等。主要方法如下所示:

getBoundingRects():返回Rects的列表,每个Rects都是显示屏上非功能区域的边界矩形。

getSafeInsetLeft ():返回安全区域距离屏幕左边的距离,单位是px。

getSafeInsetRight ():返回安全区域距离屏幕右边的距离,单位是px。

getSafeInsetTop ():返回安全区域距离屏幕顶部的距离,单位是px。

getSafeInsetBottom():返回安全区域距离屏幕底部的距离,单位是px。

 

适配代码如下:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {root_layout.setOnApplyWindowInsetsListener { view, windowInsets ->val displayCutout = windowInsets.displayCutoutif (displayCutout != null) {val left = displayCutout.safeInsetLeftval top = displayCutout.safeInsetTopval right = displayCutout.safeInsetRightval bottom = displayCutout.safeInsetBottomval leftParams: FrameLayout.LayoutParams = btn_left.layoutParams as FrameLayout.LayoutParamsleftParams.setMargins(left, top, right, bottom)}windowInsets.consumeSystemWindowInsets()}
}


 
root_layout是界面的根布局,上面代码就是获取安全区域,将按钮设置在安全区域以外。
 

现在按钮就没有被刘海挡住了。

二、non-SDK接口限制
一般来说,SDK 接口是指在 Android 框架软件包索引中记录的接口。 对非 SDK 接口的处理是 API 抽象化的实现细节;其会随时更改。
Android P 引入了针对非 SDK 接口的新使用限制,无论是直接使用还是通过反射或 JNI 间接使用。 无论应用是引用非 SDK 接口还是尝试使用反射或 JNI 获取其句柄,均适用这些限制。
名单分类:

Light grey list: targetSDK>=P时,警告;
Dark grey list:targetSDK<P时,警告;>=p时,不允许调用;
Black list:三方应用不允许调用;
三、Battery Improvements
谷歌在P版本之前没有一个完整的功耗解决方案,OEM厂商分别开发各自的功耗方案,管控手段都包括了清理应用,功耗得到优化,但是同时也影响了三方应用的一些功能正常使用,谷歌为了解决这个问题在P版本提出了自己的功耗解决方案。
主要方案:
AAB(Auto Awesome Battery):
1、通过ML算法将应用进行分类,不同类型的应用功耗管控策略不一样
2、Firebase Cloud Messaging (FCM):管控三方消息接收的频率
3、谷歌提供了统一的应用的管控方法:Forced App Standby (FAS),谷歌不会通过清理应用来优化功耗
Extreme Battery Saver(EBS)谷歌超级省电模式;
Smart screen brightness:屏幕亮度调节优化算法。
影响
谷歌功耗方案对三方应用各种管控,存在导致应用后台功能无法正常使用的可能,特别是:IM、邮箱、闹钟、音乐(直播)、地图导航、运动健康、下载、日历等应用影响比较大。目前通过谷歌提供的调试命令验证:所有的应用都有可能会被分到管控的类型,对三方的后台功能是有影响的。
 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/77034.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

出行计划(2023寒假每日一题 16)

最近西西艾弗岛上出入各个场所都要持有一定时限内的核酸检测阴性证明。 具体来时&#xff0c;如果在 t t t 时刻做了核酸检测&#xff0c;则经过一段时间后可以得到核酸检测阴性证明。 这里我们假定等待核酸检测结果需要 k k k 个单位时间&#xff0c;即在 t k tk tk 时刻…

MapTR v2文章研读

MapTR v2论文来了&#xff0c;本文仅介绍v2相较于v1有什么改进之处&#xff0c;如果想了解v1版本的论文细节&#xff0c;可见链接。 相较于maptr&#xff0c;maptr v2改进之处&#xff1a; 在分层query机制中引进解耦自注意力机制&#xff0c;有效降低了内存消耗&#xff1b;…

Android 11 系统默认语言修改

Android 系统原版默认的语言为英文,但是对于中国大陆 Android 产品厂商来说,我们定制系统可能需要用户一开机就是简体中文。所以把 Android 系统出厂设置为简体中文对于 Android 系统产品化非常重要,我们可以通过修改系统属性来达到默认语言的作用。本文主要是在 Android 11…

【mysql】出现 slow sql 问题及建议

文章目录 1. SQL 执行什么情况下会变慢&#xff1f;2. 影响 SQL 语句执行效率的主要因素有哪些&#xff1f;3. 慢 SQL 是如何拖垮数据库的&#xff1f;4. 最佳实践建议 1. SQL 执行什么情况下会变慢&#xff1f; ● 数据量增加&#xff1a;数据库中的数据量可能会逐渐增加&…

Jenkins 页面部分显示Http状态403 被禁止

前言 生产环境Jenkins部署了一段时间了&#xff0c;结果今天在流水线配置中&#xff0c;部分页面显示Jenkins 页面部分显示Http状态403 被禁止&#xff0c;修改配置点击保存之后偶尔也会出现这个。 问题 以下是问题图片 解决 在全局安全配置里面&#xff0c;勾选上启用代…

电脑磁盘分区形式是什么?如何更改?

磁盘分区形式介绍 在了解为什么以及如何更改分区形式之前&#xff0c;让我们对磁盘分区形式有一个基本的了解。一般来说&#xff0c;分区形式是指主引导记录&#xff08;MBR&#xff09;和 GUID 分区表&#xff08;GPT&#xff09;。 MBR和GPT是Windows系统中常用…

003传统图机器学习、图特征工程

文章目录 一. 人工特征工程、连接特征二. 在节点层面对连接特征进行特征提取三. 在连接层面对连接特征进行特征提取四. 在全图层面对连接特征进行特征提取 一. 人工特征工程、连接特征 节点、连接、子图、全图都有各自的属性特征&#xff0c; 属性特征一般是多模态的。除属性特…

从构建者到设计者的低代码之路

低代码开发技术&#xff0c;是指无需编码或通过少量代码就可以快速生成应用程序的工具&#xff0c;一方面可降低企业应用开发人力成本和对专业软件人才的需求&#xff0c;另一方面可将原有数月甚至数年的开发时间成倍缩短&#xff0c;帮助企业实现降本增效、灵活迭代。那么&…

MySQL 8.0 驱动与阿里druid版本兼容操作

注意&#xff1a;这个异常表面druid数据源的版本与MySql 8.0的驱动版本不匹配&#xff0c;解决方法如下&#xff1a; 确保MySql 8.0的驱动如下网址&#xff1a; <dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifact…

Linux——环境变量

✅<1>主页&#xff1a;&#xff1a;我的代码爱吃辣 &#x1f4c3;<2>知识讲解&#xff1a;Linux——环境变量 ☂️<3>开发环境&#xff1a;Centos7 &#x1f4ac;<4>前言&#xff1a;环境变量(environment variables)一般是指在操作系统中用来指定操作…

嵌入式学习之链表

对于链表&#xff0c;要重点掌握链表和数组区别和实现&#xff0c;链表静态添加和动态遍历&#xff0c;链表中pointpoint-next,链表节点个数的查找&#xff0c;以及链表从指定节点后方插入新节点的知识。

服务器巡检表-监控指标

1、巡检指标 系统资源K8S集群NginxJAVA应用RabbitMQRedisPostgreSQLElasticsearchELK日志系统 2、巡检项 检查项目 检查指标 检查标准 系统资源 CPU 使用率 正常&#xff1a;&#xff1c;70% 低风险&#xff1a;≥ 70% 中风险&#xff1a;≥ 85% 高风险&#xff1a;≥ 9…

图片怎么压缩大小?这样压缩图片很简单

在日常生活中&#xff0c;我们常常需要处理各种各样的图片文件&#xff0c;但有时候图片的大小可能会成为问题。比如在上传图片到网站或者将图片发送给朋友时&#xff0c;过大的图片可能会导致上传速度变慢或者占用过多内存。这时&#xff0c;我们就需要用到图片压缩了&#xf…

大数据课程L9——网站流量项目的实时业务处理代码

文章作者邮箱:yugongshiye@sina.cn 地址:广东惠州 ▲ 本章节目的 ⚪ 掌握网站流量项目的SparkStreaming代码; ⚪ 掌握网站流量项目的HBaseUtil代码; ⚪ 掌握网站流量项目的MysqlUtil代码; ⚪ 掌握网站流量项目的LogBean代码; ⚪ 掌握网站流量项目的To…

Servlet基础

Servlet基础 一. 单选题&#xff08;共5题&#xff0c;50分&#xff09;二. 判断题&#xff08;共5题&#xff0c;50分&#xff09; 一. 单选题&#xff08;共5题&#xff0c;50分&#xff09; (单选题) 下面选项中, 哪个方法用于返回映射到某个资源文件的URL对象&#xff08;&…

【Python】爬虫基础

爬虫是一种模拟浏览器实现&#xff0c;用以抓取网站信息的程序或者脚本。常见的爬虫有三大类&#xff1a; 通用式爬虫&#xff1a;通用式爬虫用以爬取一整个网页的信息。 聚焦式爬虫&#xff1a;聚焦式爬虫可以在通用式爬虫爬取到的一整个网页的信息基础上只选取一部分所需的…

使用生成式 AI 增强亚马逊云科技智能文档处理

数据分类、提取和分析对于处理大量文档的组织来说可能具有挑战性。传统的文档处理解决方案是手动的、昂贵的、容易出错的,并且难以扩展。利用 Amazon Textract 等 AI 服务,亚马逊云科技智能文档处理(IDP)允许您利用业界领先的机器学习(ML)技术来快速准确地处理任何扫描文档或图…

Blender之锁定摄像机到视图方位

文章目录 当你在blender 中时&#xff0c;想要让你的摄像机跟随你的视图方位&#xff0c;以方便你的后期的制作&#xff0c;那应该怎么半&#xff1f; 先点击摄像机的图标&#xff0c;进入摄像机视图 然后按一下键盘的N 键&#xff0c;进入编辑模式&#xff0c;选择视图 最后…

【业务功能107】微服务-springcloud-springboot-Sentinel容器安装-熔断降级限流

Sentinel 在微服务架构下&#xff0c;会涉及到 微服务A需要远程调用其他的微服务B,C,D等的接口&#xff0c;比如商品服务接口&#xff0c;需要调用库存服务数据&#xff0c;秒杀服务数据等&#xff0c;这里就会衍生一个长链路的调用过程&#xff0c;那么一旦下游需要被调用的数…

800V威迈斯车载充电机

800V威迈斯车载充电机VMAX二合一车载充电系统高压平台&#xff0c;将传统的6.6KW双向OBC、2.5KW DC\DC进行系统级的高功率密度集成&#xff1b;采用磁集成技术方案&#xff0c;创新性地将产品的原边绕组&#xff0c;高压绕组及低压Busbar进行系统级的集成&#xff1b;OBC功能转…