芯片: 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>