Android13 分辨率被SystemUI占用问题

1.前言

        在开发Android13时,发现,打开SystemUI时,应用通过DisplayMetrics获取分辨率是,获取的值是被SystemUI占用后剩余的,如实际分辨率是1280x800,获取得到的是1280x752,实际上是SystemUI占用的48,我们需要修改系统来满足应用通过获取DisplayMetrics分辨率是屏的正式分辨率以对应适配使用。

2.修改方法

        修改framewore层代码,如下:

diff --git a/services/core/java/com/android/server/wm/DisplayPolicy.java b/services/core/java/com/android/server/wm/DisplayPolicy.java
old mode 100644
new mode 100755
index 613e675..552d021
--- a/services/core/java/com/android/server/wm/DisplayPolicy.java
+++ b/services/core/java/com/android/server/wm/DisplayPolicy.java
@@ -2039,11 +2073,13 @@ public class DisplayPolicy {
                 final Insets decor = calculateDecorInsetsWithInternalTypes(insetsState);
                 final Insets statusBar = insetsState.calculateInsets(displayFrame,
                         Type.statusBars(), true /* ignoreVisibility */);
-                mNonDecorInsets.set(decor.left, decor.top, decor.right, decor.bottom);
+                //mNonDecorInsets.set(decor.left, decor.top, decor.right, decor.bottom);
+                mNonDecorInsets.set(decor.left, decor.top, decor.right, 0);
                 mConfigInsets.set(Math.max(statusBar.left, decor.left),
                         Math.max(statusBar.top, decor.top),
                         Math.max(statusBar.right, decor.right),
-                        Math.max(statusBar.bottom, decor.bottom));
+                        Math.max(statusBar.bottom, 0));
+                        //Math.max(statusBar.bottom, decor.bottom));
                 mNonDecorFrame.set(displayFrame);
                 mNonDecorFrame.inset(mNonDecorInsets);
                 mConfigFrame.set(displayFrame);

3.结果

        通过DisplayMetrics获取分辨率正确,通过adb下wm size获取也正确。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值