android13.0 保持平板模式isTablat下修改成手机模式isPhone布局显示

DPI大小实际是可以控制平板模式和手机模式,显示较大会自动切换到手机模式。

  

  

               左为平板模式                                       右为手机模式

布局差异就在导航栏,任务栏,all app界面上

但现在有个功能上的问题,13.0下做了分屏功能,切换到手机模式下后不支持分屏功能,强制调出来也没有功能launcher还会报错。所以只能对比手机模式的布局在平板模式下去改它的布局使其接近

第一步:android13.0针对平板 把导航栏的实现,从NavigationBar变成了TaskBar,所以存在两个导航栏。手机模式时调用的是SystemUI下NavigationBar。平板模式时调用的是launcher下的TaskBar。所以在平板模式下得先去掉TaskBar导航栏,调出NavigationBar

packages/apps/Launcher3/quickstep/src/com/android/launcher3/taskbar/TaskbarManager.java,禁掉isTaskBarEnabled

修改代码路径frameworks/base/packages/SystemUI/shared/src/com/android/systemui/shared/recents/utilities/Utilities.java 以下放出NavigationBar

frameworks/base/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBar.java

frameworks/base/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarController.java

diff --git a/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarController.java b/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarController.java
index 5c8d2212..a4d44085 100755
--- a/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarController.java
+++ b/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarController.java
@@ -94,7 +94,8 @@ public class NavigationBarController implements
     private final StatusBarKeyguardViewManager mStatusBarKeyguardViewManager;
     private int mNavMode;
     private final BroadcastDispatcher mBroadcastDispatcher;
-    @VisibleForTesting boolean mIsTablet;
+    // @VisibleForTesting boolean mIsTablet;
+    @VisibleForTesting boolean mIsTablet = false;
 
     /** A displayId - nav bar maps. */
     @VisibleForTesting
@@ -136,7 +137,7 @@ public class NavigationBarController implements
                 navBarHelper, navigationModeController, sysUiFlagsContainer,
                 dumpManager, autoHideController, lightBarController, pipOptional,
                 backAnimation.orElse(null));
-        mIsTablet = isTablet(mContext);
+        // mIsTablet = isTablet(mContext);
         /*UNISOC:Add for bug 1883604@{*/
         mBroadcastDispatcher = Dependency.get(BroadcastDispatcher.class);
         if (UnisocPowerManagerUtil.SUPPORT_SUPER_POWER_SAVE && mIsTablet){
@@ -151,7 +152,7 @@ public class NavigationBarController implements
     @Override
     public void onConfigChanged(Configuration newConfig) {
         boolean isOldConfigTablet = mIsTablet;
-        mIsTablet = isTablet(mContext);
+        // mIsTablet = isTablet(mContext);
         boolean largeScreenChanged = mIsTablet != isOldConfigTablet;
         // If we folded/unfolded while in 3 button, show navbar in folded state, hide in unfolded
         if (largeScreenChanged && updateNavbarForTaskbar()) {
@@ -273,7 +274,7 @@ public class NavigationBarController implements
     @Override
     public void onDisplayReady(int displayId) {
         Display display = mDisplayManager.getDisplay(displayId);
-        mIsTablet = isTablet(mContext);
+        // mIsTablet = isTablet(mContext);
         createNavigationBar(display, null /* savedState */, null /* result */);
     }

以上是去掉TaskBar导航栏,调出NavigationBar。单独修改Utilities.java也可以调出NavigationBar。这里保险一些怕有别的bug。

第二步:因为在平板模式下调出了NavigationBar导航栏,平板模式的桌面下Hotseat任务栏里的图标依旧在那个位置,就与NavigationBar重叠了。所以得让Hotseat任务栏在平板模式下处于手机模式布局,直接修改判断packages/apps/Launcher3/src/com/android/launcher3/DeviceProfile.java

这样布局就变成手机模式的样式了,可依旧是重叠状态,我们还得修改Hotseat横竖屏高度

这样桌面布局就和手机模式一致了

第三步:主功能all app界面,手机模式下周围是没有间隙的全部铺满。所以我们也要在平板模式下铺满all app界面packages/apps/Launcher3/src/com/android/launcher3/DeviceProfile.java

修改allAppsTopPadding顶部边距默认0

修改左右边距

结语:这样整一下,就能在平板模式下达到手机模式的布局且保留了分屏功能,但不是在所有dpi下都可以,此修改只是让平板模式和手机模式一样的显示。但一旦修改显示大小dpi,达到了切换手机模式的数值。它就会变成手机模式没有分屏功能。所以最好是锁定一个dpi。比如dpi230变成手机模式,210还是平板模式,我们就锁定210。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

陈大大要变强

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值