Android 12 大屏时底下显示任务栏以及虚拟按键靠右问题

时间:2024-10-08 10:37:33

Android 12 点大屏时,底下导航栏会变成显示一个任务栏,现象如下图:

如果想要屏蔽底下任务栏显示,可以修改packages/apps/Launcher3/src/com/android/launcher3/config/中的ENABLE_TASKBAR的初始值为false即可。

  1.      public static final BooleanFlag ENABLE_TASKBAR = getDebugFlag(
  2. -            "ENABLE_TASKBAR", true, "Allows a system Taskbar to be shown on larger devices.");
  3. +            "ENABLE_TASKBAR", false, "Allows a system Taskbar to be shown on larger devices.");

上面修改以后,底下任务栏就没有了,但是这个时候导航栏也是没有的。

跟踪代码发现,如果屏幕的(最小边长度*160/dpi值)< 600,就会判断为设备是平板设备。这个时候SystemUI会移除导航栏显示任务栏,SystemUI中 计算设备是否为平板设备函数为\frameworks\base\packages\SystemUI\shared\src\com\android\systemui\shared\recents\utilities\中的public static boolean isTablet(Context context)
 

  1. public static boolean isTablet(Context context) {
  2. final WindowManager windowManager = ();
  3. final Rect bounds = ().getBounds();
  4. float smallestWidth = dpiFromPx(((), ()),
  5. ().getConfiguration().densityDpi);
  6. return smallestWidth >= TABLET_MIN_DPS;
  7. }

函数中TABLET_MIN_DPS为600

frameworks\base\packages\SystemUI\src\com\android\systemui\navigationbar\中的函数initializeTaskbarIfNecessary判断设备为平板以后,会调用removeNavigationBar(());移除导航栏显示。

  1. /** @return {@code true} if taskbar is enabled, false otherwise */
  2. private boolean initializeTaskbarIfNecessary() {
  3. if (mIsTablet) {
  4. // Remove navigation bar when taskbar is showing
  5. removeNavigationBar(());
  6. (());
  7. } else {
  8. ();
  9. }
  10. return mIsTablet;
  11. }

这个时候,如果要显示导航栏,把上面的isTablet函数返回false就可以显示了。

  1. --- a/frameworks/base/packages/SystemUI/shared/src/com/android/systemui/shared/recents/utilities/
  2. +++ b/frameworks/base/packages/SystemUI/shared/src/com/android/systemui/shared/recents/utilities/
  3. @@ -127,7 +127,7 @@ public class Utilities {
  4. float smallestWidth = dpiFromPx(((), ()),
  5. ().getConfiguration().densityDpi);
  6. - return smallestWidth >= TABLET_MIN_DPS;
  7. + return false;//smallestWidth >= TABLET_MIN_DPS;
  8. }
  9. public static float dpiFromPx(float size, int densityDpi) {

补充:如果修改后导航栏显示不见了,应该是系统的dpi有关,如果是1920x1080的屏dpi小于240,就会出现这个问题,这个时候导航栏应该是跑到边上去了。可以尝试如下修改:

  1. --- a/frameworks/base/core/res/res/values/
  2. +++ b/frameworks/base/core/res/res/values/
  3. @@ -3511,7 +3511,7 @@
  4. <!-- Controls whether the nav bar can move from the bottom to the side in landscape.
  5. Only applies if the device display is not square. -->
  6. - <bool name="config_navBarCanMove">true</bool>
  7. + <bool name="config_navBarCanMove">false</bool>
  1. --- a/frameworks/base/packages/SystemUI/res/values-sw900dp/
  2. +++ b/frameworks/base/packages/SystemUI/res/values-sw900dp/
  3. @@ -19,6 +19,6 @@
  4. <resources>
  5. <!-- Nav bar button default ordering/layout -->
  6. - <string name="config_navBarLayout" translatable="false">back,home,left;space;right,recent</string>
  7. + <string name="config_navBarLayout" translatable="false">left;volume_sub,back,home,recent,volume_add,screenshot;right</string>