当前位置: 首页 > news >正文

Android 13 大屏显示时关于SystemUI和Launcher3问题

当系统运行在大屏上时,原来显示SystemUI导航栏的位置会变成Launcher3的任务栏,然后导航栏的3个按键显示靠右下角显示
我的博客
1.先看SystemUI的导航栏为什么会消失,移动


/SystemUI/src/com/android/systemui/statusbar/NavigationBarController.javapublic void createNavigationBars(final boolean includeDefaultDisplay,RegisterStatusBarResult result) {//更新辅助功能按钮模式updateAccessibilityButtonModeIfNeeded();// 判断是否初始化TaskBar,不需要TaskBar就默认显示上创建导航栏final boolean shouldCreateDefaultNavbar = includeDefaultDisplay&& !initializeTaskbarIfNecessary();Display[] displays = mDisplayManager.getDisplays();for (Display display : displays) {if (shouldCreateDefaultNavbar || display.getDisplayId() != DEFAULT_DISPLAY) {createNavigationBar(display, null /* savedState */, result);}}}/** @return {@code true} if taskbar is enabled, false otherwise */private boolean initializeTaskbarIfNecessary() {//判断是否是平板if (mIsTablet) {// Remove navigation bar when taskbar is showing//移除导航栏的时候任务栏显示Trace.beginSection("NavigationBarController#initializeTaskbarIfNecessary");removeNavigationBar(mContext.getDisplayId());mTaskbarDelegate.init(mContext.getDisplayId());Trace.endSection();} else {mTaskbarDelegate.destroy();}return mIsTablet;}...{mIsTablet = isTablet(mContext);//如果判断它是平板}/SystemUI/shared/src/com/android/systemui/shared/recents/utilities/Utilities.java/** @return whether or not {@param context} represents that of a large screen device or not */@TargetApi(Build.VERSION_CODES.R)//如果屏幕的(最小边长度*160/dpi值)< 600,就会判断为设备是平板设备public static boolean isTablet(Context context) {final WindowManager windowManager = context.getSystemService(WindowManager.class);final Rect bounds = windowManager.getCurrentWindowMetrics().getBounds();float smallestWidth = dpiFromPx(Math.min(bounds.width(), bounds.height()),context.getResources().getConfiguration().densityDpi);//add textreturn false;//smallestWidth >= TABLET_MIN_DPS; 如果想要显示导航栏,直接返回false//add text}//判断屏幕dpipublic static float dpiFromPx(float size, int densityDpi) {float densityRatio = (float) densityDpi / DisplayMetrics.DENSITY_DEFAULT;return (size / densityRatio);}

2.找到Launcher3显示任务栏的部分,也做类似的修改不让任务栏显示

/packages/apps/Launcher3/quickstep/src/com/android/launcher3/taskbar/TaskbarManager.javaprivate void recreateTaskbar() {destroyExistingTaskbar();DeviceProfile dp = mUserUnlocked ? LauncherAppState.getIDP(mContext).getDeviceProfile(mContext) : null;//add text    boolean isTaskBarEnabled = false;//dp != null && dp.isTaskbarPresent;//add text  if (!isTaskBarEnabled) {SystemUiProxy.INSTANCE.get(mContext).notifyTaskbarStatus(/* visible */ false, /* stashed */ false);return;}...    
}/Launcher3/src/com/android/launcher3/states/RotationHelper.javapublic static boolean getAllowRotationDefaultValue(DeviceProfile deviceProfile) {// If the device's pixel density was scaled (usually via settings for A11y), use the// original dimensions to determine if rotation is allowed of not.float originalSmallestWidth = dpiFromPx(Math.min(deviceProfile.widthPx, deviceProfile.heightPx), DENSITY_DEVICE_STABLE);//add text        return  false;//originalSmallestWidth >= MIN_TABLET_WIDTH;//add text }/Launcher3/src/com/android/launcher3/util/DisplayController.java/*** Returns {@code true} if the bounds represent a tablet.*/public boolean isTablet(WindowBounds bounds) {//add textreturn false;//smallestSizeDp(bounds) >= MIN_TABLET_WIDTH;//add text}/Launcher3/src/com/android/launcher3/util/window/WindowManagerProxy.javapublic class WindowManagerProxy implements ResourceBasedOverride {Resources systemRes = context.getResources();Configuration config = systemRes.getConfiguration();-        boolean isTablet = config.smallestScreenWidthDp > MIN_TABLET_WIDTH;
+        boolean isTablet = false;//config.smallestScreenWidthDp > MIN_TABLET_WIDTH;boolean isGesture = isGestureNav(context);boolean isPortrait = config.screenHeightDp > config.screenWidthDp;-        boolean isTablet = swDp >= MIN_TABLET_WIDTH;
+        boolean isTablet = false;//swDp >= MIN_TABLET_WIDTH;boolean isTabletOrGesture = isTablet|| (Utilities.ATLEAST_R && isGestureNav(context));

Android 13 平板Taskbar加载流程

相关文章:

  • 记录unraid docker更新的域名
  • 万物互联,触手可及“2024南京智慧城市,物联网,大数据展会”
  • Elasticsearch:Golang ECS 日志记录 - zap
  • Sokit(TCP/UDP调试工具)
  • 均匀圆形阵列原理及MATLAB仿真
  • Spring Boot集成Redis与Lua脚本:构建高效的分布式多规则限流系统
  • 人工智能与机器学习原理精解【5】
  • 如何查看cpu架构,查看CPU架构的方法
  • Pytorch深度学习实践(10)循环神经网络RNN
  • 昇思25天学习打卡营第24天|RNN实现情感分类
  • 黑马JavaWeb企业级开发(知识清单)03——HTML实现正文:排版(音视频、换行、段落)、布局标签(div、span)、盒子模型
  • .mp4格式的视频为何不能通过video标签在chrome浏览器中播放?
  • Typescript学习笔记(2.0)
  • Pytorch使用教学4-张量的索引
  • 88个python的基本语法知识【二】
  • [译]前端离线指南(上)
  • 【5+】跨webview多页面 触发事件(二)
  • 230. Kth Smallest Element in a BST
  • ES6简单总结(搭配简单的讲解和小案例)
  • es的写入过程
  • Git同步原始仓库到Fork仓库中
  • javascript面向对象之创建对象
  • Js基础知识(一) - 变量
  • PV统计优化设计
  • react-core-image-upload 一款轻量级图片上传裁剪插件
  • spark本地环境的搭建到运行第一个spark程序
  • 从tcpdump抓包看TCP/IP协议
  • 发布国内首个无服务器容器服务,运维效率从未如此高效
  • 聊聊redis的数据结构的应用
  • 模型微调
  • 批量截取pdf文件
  • 如何正确配置 Ubuntu 14.04 服务器?
  • 说说动画卡顿的解决方案
  • 微服务入门【系列视频课程】
  • 小程序测试方案初探
  • 一道闭包题引发的思考
  • 继 XDL 之后,阿里妈妈开源大规模分布式图表征学习框架 Euler ...
  • ​ubuntu下安装kvm虚拟机
  • # Spring Cloud Alibaba Nacos_配置中心与服务发现(四)
  • #NOIP 2014# day.1 T2 联合权值
  • #Z0458. 树的中心2
  • (10)STL算法之搜索(二) 二分查找
  • (Arcgis)Python编程批量将HDF5文件转换为TIFF格式并应用地理转换和投影信息
  • (k8s)Kubernetes本地存储接入
  • (论文阅读31/100)Stacked hourglass networks for human pose estimation
  • (篇九)MySQL常用内置函数
  • (四)opengl函数加载和错误处理
  • (一)u-boot-nand.bin的下载
  • (转)Linux整合apache和tomcat构建Web服务器
  • (转)memcache、redis缓存
  • (转)关于pipe()的详细解析
  • (转)如何上传第三方jar包至Maven私服让maven项目可以使用第三方jar包
  • .naturalWidth 和naturalHeight属性,
  • .net core 连接数据库,通过数据库生成Modell
  • .NET Core跨平台微服务学习资源