Android 设置density导航栏显示到右侧时导航栏图标挤在一起的bug

大佬牛逼。原文来自

Android TV导航栏显示在左侧/右侧时,布局显示异常_qiangsf123的博客-优快云博客_android tv导航栏

以下是我的改法

/frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java

      // PATCH Start
        int width = mDisplay.getWidth();
        int heigth = mDisplay.getHeight();
        int shortSize = width > heigth ? heigth : width;
        int dp = shortSize * DisplayMetrics.DENSITY_DEFAULT / mConfiguration.densityDpi;
        if (dp < 600 && width != heigth) {
            rot = (rot + 1) % 4;
            Log.d(TAG, "NavigationBar orient is workaround displayed");
        }
        // End

详细说下现象:

系统横屏。 初始导航栏在底部。 然后adb shell

wm density 320 . 导航栏这时飞到右边,并且三按钮挤在一起。使用大佬的改法才恢复正常。

还有别的大佬是禁止了导航栏飞到右边的改法。

感谢大佬分享。

====后续补充。 实测在1024X600的竖屏时出现了新的bug,density 为240/320时,图标要么挤在一起,要么就是显示不完全。经调试观测,布局里面的width和height属性相反。所以此改法有问题。会衍生新bug后来用的是下面的改法。

diff --git a/frameworks/base/services/core/java/com/android/server/policy/PhoneWindowManager.java b/frameworks/base/services/core/java/com/android/server/policy/PhoneWindowManager.java
index a72a986..9cb7d6c 100644
--- a/frameworks/base/services/core/java/com/android/server/policy/PhoneWindowManager.java
+++ b/frameworks/base/services/core/java/com/android/server/policy/PhoneWindowManager.java
@@ -2406,7 +2406,7 @@ public class PhoneWindowManager implements WindowManagerPolicy {
         int longSizeDp = longSize * DisplayMetrics.DENSITY_DEFAULT / density;
 
         // Allow the navigation bar to move on non-square small devices (phones).
-        mNavigationBarCanMove = width != height && shortSizeDp < 600;
+        mNavigationBarCanMove = false;//luke nop width != height && shortSizeDp < 600;

即禁用了飞到右边。此时1024X600不论横竖屏,density多少都不受影响。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值