关于Android12第三方应用左右两侧有黑边问题

最近在RK3568平台Android12方案板上安装TV版腾讯视频时,发现左右两侧有黑边,无法铺满屏幕显示,而其他系统应用和自己开发的应用都正常。后来无意中发现把以前开发的厂测工具应用安装在这上面也有黑边,而这个厂测在之前的平台上是正常的,不同的是之前平台是Android7.0的,APP的targetSdk=23,也是7.0,所以猜测是跟sdk版本有关。于是把厂测APP改成targetsdk=32,跟Android12匹配,果然就没有黑边了。

这是android12开始支持了多窗口和分屏等功能,对一些低版本sdk的应用兼容性有了调整,如果不想改变targetsdk到更高,也可以为Activity增加resizeableActivity属性,同样可以达到去除黑边效果。

<activity
    android:name=".YourActivity"
    android:resizeableActivity="true">
</activity>

以上两种解决办法适用于自己开发的应用,但对应腾讯视频这种第三方应用就只能从系统层面去解决了。

思考:

所有给Activity设置的属性,最终都需要经过系统层来解析相关配置,然后做成对应的处理。那是不是可以找到系统解析XML的地方进行拦截处理就可以了,跟上一篇中处理强制设置第三方应用横竖屏显示一样。

系统解析Manifest.xml源码路径为:

 frameworks\base\core\java\android\content\pm\parsing\component\ParsedActivityUtils.java

ParseResult()方法中重写resizeMode值即可。

 @NonNull
    @VisibleForTesting(visibility = VisibleForTesting.Visibility.PACKAGE)
    public static ParseResult<ParsedActivity> parseActivityOrReceiver(String[] separateProcesses,
            ParsingPackage pkg, Resources res, XmlResourceParser parser, int flags,
            boolean useRoundIcon, ParseInput input)
            throws XmlPullParserException, IOException {
        final String packageName = pkg.getPackageName();
        final ParsedActivity
                activity = new ParsedActivity();
        ...
         //int resizeMode = getActivityResizeMode(pkg, sa, screenOrientation);
         int resizeMode = ActivityInfo.RESIZE_MODE_RESIZEABLE; //固定开启resizeable属性
        ...
}

这样就可以从系统层面解决所有应用显示黑边问题,包括安装的第三方应用。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值