Android 挖孔屏适配

本文分享了从刘海屏到挖孔屏的发展历程,以及在去除刘海屏的适配过程中遇到的问题与解决方案。通过调整定制资源和优先级设置,成功实现了去除刘海屏的效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

刘海屏刚出来那会儿,怎么看怎么丑,后面又是水滴屏,稍微有点顺眼,再就是挖孔屏,都是啥玩意。

现在再看,刘海似乎也没那么丑了,居然还觉得挖孔的有点惊艳!

需求

前段时间在做挖孔屏适配,中间就不要有刘海,需求就是把这个刘海去掉。

调研

官方关于刘海屏有介绍,其中有两个属性比较关键:

说明
config_mainBuiltInDisplayCutout用于定义刘海屏形状的路径。这是一个可由 android.util.PathParser 解析的字符串,并且是告知系统刘海屏大小和形状的方式。可在路径中指定 @dp 以便模拟针对不同设备的形状。由于实际的刘海屏具有精确的像素尺寸,因此在定义硬件刘海屏的路径时,请勿使用 @dp 指定符。
config_fillMainBuiltinDisplayCutout一个确定是否在软件中绘制刘海屏路径(在上文中进行了定义)的布尔值。可用于模拟刘海屏,或填充实际刘海屏,以实现抗锯齿。如果为 true,则系统会以黑色填充 config_mainBuiltInDisplayCutout

看原生 frameworks/base/core/res/res/values/config.xml 这两个属性:

<string translatable="false" name="config_mainBuiltInDisplayCutout"></string>
<bool name="config_fillMainBuiltInDisplayCutout">false</bool>

说明原生是没有适配刘海,而现在手机却看到了刘海,肯定是有哪里定制,找了下,果然,有定制资源 apk A 将 config_fillMainBuiltInDisplayCutout 打开了,并配了 config_mainBuiltInDisplayCutout。

需求是去刘海,我只要再定制个资源,设置 config_fillMainBuiltInDisplayCutout 为 false 即可。

解决

一通复制粘贴,我的定制资源 apk B 完成了,等编译验证,结果刘海还在,WTF,不应该啊,难道是我的定制资源 apk 没有覆盖成功?

一般要想覆盖,可以使用 LOCAL_OVERRIDES_PACKAGES,可是并没有看到 apk A 有这样的写法,为什么他优先使用了 apk A 资源配置,我定制资源 apk B 没有生效,是不是还要哪里配置?一开始自然怀疑自己是不是哪里写错了,一行行检查代码,问之前做过这块的同事,确认我写的代码没问题!协调资源问 OS 组, ROM 组,并没有得到更多的支持。

以为这个问题没法解了,处在放弃边缘,有人提到了 priority, apk A 和 apk B 等级是一样,自然不能生效AndroidManifest.xml 有这段:

<overlay 
	android:targetPackage="com.android.settings​" 
	android:isStatic="true" 
	android:priority="500" />

Android overlay 机制允许在不修改packages中apk的情况下,来自定义 framework 和 package 中的资源文件,实现资源的定制。其中 priority 决定优先级,必须是整数,默认是 0,范围是[-1000, 1000]​。​

握草,我再怎么也想不到是 android:priority 起作用了。

最后

没有什么问题是解不掉的,处理问题要积极推动,直到有定论。嗯,是这样的!

公众号

我的公众号:吴小龙同学,欢迎关注交流,公号回复关键字「1024」有惊喜哦。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值