Android 11.0 修改系统显示大小导航栏消失
1.显示大小设置为大时,导航栏图标不显示。
设置为大,较大,最大时,导航栏图标不显示。
2.开始怀疑是导航栏被隐藏了,各种折腾无效。
3.发现:
frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/EdgeBackGestureHandler.java中
updateCurrentUserResources方法异常,加打印:
android.util.Log.d(TAG, "updateCurrentUserResources: navigation_bar_gesture_height "+ res.getDimension(com.android.internal.R.dimen.navigation_bar_gesture_height));android.util.Log.d(TAG, "updateCurrentUserResources: navigation_bar_frame_height "+ res.getDimension(com.android.internal.R.dimen.navigation_bar_frame_height));android.util.Log.d(TAG, "updateCurrentUserResources: navigation_bar_height "+ res.getDimension(com.android.internal.R.dimen.navigation_bar_height));android.util.Log.d(TAG, "updateCurrentUserResources: defaultGestureHeight "+ defaultGestureHeight + " dm.density " + dm.density + " dm.densityDpi " + dm.densityDpi);
结果:
2024-06-24 18:33:55.932 686-686 EdgeBackGestureHandler com.android.systemui D updateCurrentUserResources: dm:DisplayMetrics{density=1.1875, width=1920, height=720, scaledDensity=1.1875, xdpi=320.0, ydpi=320.0}
2024-06-24 18:33:55.932 686-686 EdgeBackGestureHandler com.android.systemui D updateCurrentUserResources: com.android.internal.R.dimen.navigation_bar_gesture_height:17105329
2024-06-24 18:33:55.932 686-686 EdgeBackGestureHandler com.android.systemui D updateCurrentUserResources: dm.density:1.1875
2024-06-24 18:33:55.932 686-686 EdgeBackGestureHandler com.android.systemui E updateCurrentUserResources: defaultGestureHeight:48.0
2024-06-24 18:33:55.998 686-686 EdgeBackGestureHandler com.android.systemui D updateCurrentUserResources: dm:DisplayMetrics{density=1.1875, width=1920, height=720, scaledDensity=1.1875, xdpi=320.0, ydpi=320.0}
2024-06-24 18:33:55.998 686-686 EdgeBackGestureHandler com.android.systemui D updateCurrentUserResources: com.android.internal.R.dimen.navigation_bar_gesture_height:17105329
2024-06-24 18:33:55.998 686-686 EdgeBackGestureHandler com.android.systemui D updateCurrentUserResources: dm.density:1.1875
2024-06-24 18:33:55.998 686-686 EdgeBackGestureHandler com.android.systemui E updateCurrentUserResources: defaultGestureHeight:48.0
2024-06-24 18:34:02.916 686-686 EdgeBackGestureHandler com.android.systemui D updateCurrentUserResources: dm:DisplayMetrics{density=1.375, width=1920, height=720, scaledDensity=1.375, xdpi=320.0, ydpi=320.0}
2024-06-24 18:34:02.916 686-686 EdgeBackGestureHandler com.android.systemui D updateCurrentUserResources: com.android.internal.R.dimen.navigation_bar_gesture_height:17105329
2024-06-24 18:34:02.917 686-686 EdgeBackGestureHandler com.android.systemui D updateCurrentUserResources: dm.density:1.375
2024-06-24 18:34:02.917 686-686 EdgeBackGestureHandler com.android.systemui E updateCurrentUserResources: defaultGestureHeight:0.0
2024-06-24 18:34:02.959 686-686 EdgeBackGestureHandler com.android.systemui D updateCurrentUserResources: dm:DisplayMetrics{density=1.375, width=1920, height=720, scaledDensity=1.375, xdpi=320.0, ydpi=320.0}
2024-06-24 18:34:02.959 686-686 EdgeBackGestureHandler com.android.systemui D updateCurrentUserResources: com.android.internal.R.dimen.navigation_bar_gesture_height:17105329
2024-06-24 18:34:02.959 686-686 EdgeBackGestureHandler com.android.systemui D updateCurrentUserResources: dm.density:1.375
2024-06-24 18:34:02.959 686-686 EdgeBackGestureHandler com.android.systemui E updateCurrentUserResources: defaultGestureHeight:0.0
com.android.internal.R.dimen.navigation_bar_height的值为0
4.解决:
在frameworks\base\core\res\res添加文件夹:
最小宽度sw这个是Android默认的,
一般应该是这样计算(在网上也能搜索到)
adb shell wm size 得到分辨率为 1920*720
adb shell wm density 得到密度为 160
那么sw = 160 * 小的size / density = 160x720/240 = 720
frameworks/base/core/res/res/values-sw400dp/
frameworks/base/core/res/res/values-sw460dp/
frameworks/base/core/res/res/values-sw520dp/
我的机器dm.densityDpi为180,190,220,252,284,在160和190正常
所以添加以上三个,在文件夹中添加dimens.xml文件:
<resources><!-- Height of the bottom navigation / system bar. --><dimen name="navigation_bar_height">64dp</dimen><!-- Height of the bottom navigation bar in landscape; oftenthe same as @dimen/navigation_bar_height --><dimen name="navigation_bar_height_landscape">64dp</dimen></resources>
navigation_bar_height*dm.density
180的值为:48dp
190的值为:56dp
220的值为:64dp
252的值为:72dp
284的值为:80dp