• [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;
         }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28

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

    --- 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);
         }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    解决方法

    修改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>
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
  • 相关阅读:
    Java每日笔记 面向对象理解、异常
    计算机毕业设计(附源码)python医院人事管理系统
    Java快速入门
    《Python》典型数据结构
    【Web前端】一文带你吃透CSS(中篇)
    源码分析:规则引擎提交策略
    K8S的安全机制
    FEDformer 代码分析(2)
    股票价格排行榜查询易语言代码
    .NET分布式Orleans - 8 - 贪吃蛇项目实战(准备阶段)
  • 原文地址:https://blog.csdn.net/Hebin320320/article/details/133801252