[QCM6125][Android13] 解决虚拟导航栏无法显示在底部的问题

文章目录

    • 开发平台基本信息
    • 问题描述
  • 问题分析
    • 解决方法

开发平台基本信息

芯片: QCM6125
版本: Android 13
kernel: msm-4.14

问题描述

最近在调试项目,屏幕默认是竖屏的,添加竖屏切换之后,发现虚拟导航栏一直固定在左边,即使在代码中强制显示在底部,仍然还是显示在左边。

问题分析

以往是修改navigationBarPosition方法的返回值,现在已经强制显示在底部了

--- a/QSSI.13/frameworks/base/services/core/java/com/android/server/wm/DisplayPolicy.java
+++ b/QSSI.13/frameworks/base/services/core/java/com/android/server/wm/DisplayPolicy.java
@@ -2339,15 +2339,16 @@ public class DisplayPolicy {
     @NavigationBarPosition
     int navigationBarPosition(int displayRotation) {
         if (mNavigationBar != null) {
-            final int gravity = mNavigationBar.getLayoutingAttrs(displayRotation).gravity;
-            switch (gravity) {
-                case Gravity.LEFT:
-                    return NAV_BAR_LEFT;
-                case Gravity.RIGHT:
-                    return NAV_BAR_RIGHT;
-                default:
-                    return NAV_BAR_BOTTOM;
-            }
+            // final int gravity = mNavigationBar.getLayoutingAttrs(displayRotation).gravity;
+            // switch (gravity) {
+                // case Gravity.LEFT:
+                    // return NAV_BAR_LEFT;
+                // case Gravity.RIGHT:
+                    // return NAV_BAR_RIGHT;
+                // default:
+                    // return NAV_BAR_BOTTOM;
+            // }
+                       return NAV_BAR_BOTTOM;
         }
         return NAV_BAR_INVALID;
     }

通过查阅资料得知,谷歌为了是方便横屏玩游戏等场景的时候不小心误触到特意设定的;具体代码如下:

--- a/frameworks/base/services/core/java/com/android/server/wm/DisplayPolicy.java
+++ b/frameworks/base/services/core/java/com/android/server/wm/DisplayPolicy.java
@@ -2895,9 +2895,10 @@ public class DisplayPolicy {
 
     void updateConfigurationAndScreenSizeDependentBehaviors() {
         final Resources res = getCurrentUserResources();
         mNavigationBarCanMove =
                mDisplayContent.mBaseDisplayWidth != mDisplayContent.mBaseDisplayHeight
                        && res.getBoolean(R.bool.config_navBarCanMove);
         mDisplayContent.getDisplayRotation().updateUserDependentConfiguration(res);
     }

解决方法

修改config参数为false或者在源码里面直接将mNavigationBarCanMove = fales;都行,这里是用overlay的方式,所以选择在config.xml中修改。

--- a/QSSI.13/frameworks/base/core/res/res/values/config.xml
+++ b/QSSI.13/frameworks/base/core/res/res/values/config.xml
@@ -3670,7 +3670,7 @@
 
     
-    <bool name="config_navBarCanMove">truebool>
+    <bool name="config_navBarCanMove">falsebool>
 
     
     <bool name="config_navBarTapThrough">falsebool>

你可能感兴趣的:(Android13,Android13,高通6125,虚拟导航栏,横屏,底部)