大佬牛逼。原文来自
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多少都不受影响。