【 OpenHarmony 系统应用源码魔改 】-- Launcher 之「桌面布局定制」

前言

阅读本篇文章之前,有几个需要说明一下:

  1. 调试设备:平板,如果你是开发者手机,一样可以加 Log 调试,源码仍然是手机和平板一起分析;
  2. 文章中的 Log 信息所显示的数值可能跟你的设备不一样,以你调试的数据为准。
  3. 装个逼:目前好像 OH 社区或者其它开发者还没有针对 OH 的系统应用,比如 Launcher 写过非常深入的源码解析类文章,所以此类文章,仅供大家参考学习,如转载或引用,请标明出处
  4. 定制章节会直接定位到修改的地方,如果你不仅想知道怎么改,也想知道为什么这么改,正所谓:知其然知其所以然,探其深方得真谛!
    可以看看 "【 OpenHarmony 系统应用源码解析 】-- Launcher 桌面布局 " 这篇文章。

定制需求

  1. 行数:3
  2. 列数:7

如果你看过 "【 OpenHarmony 系统应用源码解析 】-- Launcher 桌面布局 " 这篇文章的话,应该会清除,Launcher 布局的行、列数是算出来的。

算法:

  1. 列数 = ~~(屏幕宽度 + 图标间距)/ (图标大小 + 图标间距)
  2. 行数 = ~~(可用高度 + 平均列间距)/ (图标大小 + 平均列间距)

修改代码前,我们先看下默认 Launcher 效果图(平板):

在这里插入图片描述

"【 OpenHarmony 系统应用源码解析 】-- Launcher 桌面布局 " 文章中,我们已经分析过源码,并且加了 Log 展示了很多数据,例如:

let column = ~~((realWidth + minGutter) / (itemSize + minGutter));

我们看下平板的数据:

pid-1360              I     @@@ pepsimaxin : 桌面布局边距 ==> margin = 82
pid-1360              I     @@@ pepsimaxin : 屏幕宽度 ==> this.mScreenWidth = 1280
com.ohos.launcher     D     @@@ pepsimaxin : realWidth = 1116, minGutter = 6, itemSize = 96
com.ohos.launcher     D     @@@ pepsimaxin : column = 11

OK,现在我们希望把列数改成:7列,那么:

  1. realWidth:我们不会动
  2. itemSize:图标大小,我们暂时也不动

那么显而易见了,我们只需要修改 minGutter(网格间距)即可!

所以修改成多少呢?-- 这是个基础数学计算问题,不用我教你了。

我们就拿平板为例:

(1116 + 6) / (96 + 6)= 11我们只需要保证:
(1116 + minGutter) / (96 + minGutter) = 7.00 ~ 7.99 之间即可(因为是向下取整)我比较懒,直接让 GPT 给我算了下:
minGutter 的取值范围:[49.9 ~ 74],我们取个整:[50 ~ 74]

现在我们定位到源码里面,看如何修改:

📄 common/src/main/ets/default/viewmodel/LayoutViewModel.tscalculateDesktop(): any {...let itemSize = this.mLauncherLayoutStyleConfig.mAppItemSize;// 网格间距let minGutter = this.mLauncherLayoutStyleConfig.mGridGutter;let column = ~~((realWidth + minGutter) / (itemSize + minGutter));let userWidth = (realWidth + minGutter - (itemSize + minGutter) * column);let gutter = (userWidth / (column - 1)) + minGutter;let row = ~~((realHeight + gutter) / (itemSize + gutter));...}

而 minGutter 从哪读取的,就不用我说了吧?

// Phone
mGridGutter = PhonePresetStyleConstants.DEFAULT_APP_LAYOUT_MIN_GUTTER;
static readonly DEFAULT_APP_LAYOUT_MIN_GUTTER = 5;// Pad
mGridGutter = PadPresetStyleConstants.DEFAULT_APP_LAYOUT_MIN_GUTTER;
static readonly DEFAULT_APP_LAYOUT_MIN_GUTTER = 6;

到这里就有两种改法:

  1. 要么去对应的 **PresetStyleConstants 里面改 DEFAULT_APP_LAYOUT_MIN_GUTTER 值;
  2. 要么暴力点,直接改:
let minGutter = [50 ~ 74] 随便取一个值

另外,在 "【 OpenHarmony 系统应用源码解析 】-- Launcher 桌面布局 " 文章中我们也讲过,计算出来的 Column 和 Row,都是要传入 this.updateGrid(row, column) 方法,更新网格布局配置的。

所以?你猜我要干什么?更暴力的改法就是:

我不管你怎么算,直接 this.updateGrid(3, 7)

算了,不教你使坏了,我们直接看下修改后的效果:

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/52921.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

单片机编程魔法师-并行多任务程序

程序架构 程序代码 小结 数码分离,本质上就是将数据和代码逻辑进行分离,跟第一章使用数据驱动程序一样的道理。 不过这里不同之处在于。这里使用通过任务线程,但是却有2个任务在运行,两个任务都通过先初始化任务数据参数&#x…

SQLite的安装和使用

一、官网链接下载安装包 点击跳转 步骤:点击安装这个红框的dll以及红框下面的tools (如果有navicat可以免上面这个安装步骤,安装上面这个是为了能在命令行敲SQL而已) 二、SQLite的特点 嵌入的(无服务器的&#x…

hello树先生——AVL树

AVL树 一.什么是AVL树二.AVL树的结构1.AVL树的节点结构2.插入函数3.旋转调整 三.平衡测试 一.什么是AVL树 二叉搜索树虽可以缩短查找的效率,但如果数据有序或接近有序二叉搜索树将退化为单支树,查找元素相当于在顺序表中搜索元素,效率低下。…

python学习——爬虫之session请求处理cookie

import requestssessionrequests.session() url"https://passport.17k.com/ck/user/login" data{"loginName": "19139186287","password":"2001022600hzk"} ressession.post(url,datadata) print(res.text)# session通过会话…

Windows系统中批量管理Windows服务器远程桌面工具——RDCMan

一、背景 在公司没有部署对应的堡垒机系统之前,做运维测试工作的人员,需要管理大量的服务器,每天需要对服务器进行必要的巡检、系统更新发布等内容,特别是有很多Windows服务器的时候,如果我们使用Windows自带的“远程桌面连接”只能一台台连接,比较繁琐。并且不能知道那台…

【手撕数据结构】二叉树的性质

目录 叶子节点和边的性质概念小试牛刀 叶子节点和边的性质 概念 可以看到度为0的节点如F没有边,度为1的节点如C有一条边,而度为2的节点如B有两条边。那么设度为2的节点为a个,度为1的节点为b个。二叉树边 2ab另⼀⽅⾯,由于共有 a…

AcWing 897. 最长公共子序列

动态规划就是多见识应用题就完事儿了&#xff0c;也没有什么好说的。 讲解参考&#xff1a; 【E05 线性DP 最长公共子序列】 #include<iostream> #include<algorithm> #define N 1010 using namespace std; char a[N],b[N]; int n,m; int f[N][N]; int main(){…

Loki Unable to fetch labels from Loki (no org id)

应该是多租户相关导致的 参考文档: 参考文档cMulti-tenancy | Grafana Loki documentationDescribes how Loki implements multi-tenancy to isolate tenant data and queries.https://grafana.com/docs/loki/latest/operations/multi-tenancy/ https://github.com/grafana…

主流AI绘画工具-StableDiffusion本地部署方法(mac电脑版本)

Stable Diffusion是一款强大的AI生成图像模型&#xff0c;它可以基于文本描述生成高质量的图像。对于想要在本地运行此模型的用户来说&#xff0c;使用Mac电脑部署Stable Diffusion是一个非常吸引人的选择&#xff0c;特别是对于M1或M2芯片的用户。本文将详细介绍如何在Mac上本…

高效能低延迟:EasyCVR平台WebRTC支持H.265在远程监控中的优势

TSINGSEE青犀视频EasyCVR视频汇聚平台在WebRTC方面确实支持H.265编码&#xff0c;尽管标准的WebRTC API在大多数浏览器中默认并不支持H.265&#xff08;也称为HEVC&#xff0c;高效视频编码&#xff09;编码。EasyCVR平台通过一系列创新的技术手段&#xff0c;实现了在WebRTC协…

食家巷中秋美食,味蕾上的团圆盛宴

月到中秋分外明&#xff0c;在这个充满温情与思念的节日里&#xff0c;美食成为了人们传递情感、共享团圆的重要载体。而食家巷&#xff0c;以其独特的中秋美食&#xff0c;为这个佳节增添了一抹别样的风味。 走进食家巷&#xff0c;仿佛踏入了一个美食的宝藏之地。这里的传统…

excel规划求解结合vba宏笔记

目录 概念与配置 规划求解定义 excel设置规划求解 宏的基本操作 excel批量进行规划求解案例 加载规划求解模块 宏的设置 宏录制vba 其他案例 概念与配置 规划求解定义 运用“规划求解”定义并求解问题 - Microsoft 支持 excel设置规划求解 EXCEL规划求解的简明教程…

突破代码:克服编程学习中的挫折感

目录 一、心态调整&#xff1a;心理韧性的培养 接受挫折是学习的一部分 设置实际的学习目标 保持学习的乐趣 二、学习方法&#xff1a;策略的实施 逐步解决问题 寻找多样的学习资源 定期复习与实践 三、成功经验&#xff1a;实例的启示 Debug的技巧掌握 算法的深入理…

开发中如何在运行/调试时将项目热部署到Tomcat

这里有一篇不错的博客&#xff0c;可以参考 http://t.csdnimg.cn/oWcgm 正常情况下&#xff0c;我们将web项目打包成war包后&#xff0c;需要放到tomcat的webapps路径下&#xff0c;然后启动tomcat&#xff0c;才能正常访问。但是这在开发阶段是极为不便的。因此可以使用两种方…

Qt_两种创建组件的方式-通过图形化-通过代码

文章目录 一、通过图形化的方式&#xff0c;在界面上创建一个控件&#xff0c;显示hello world1.打开UI设计界⾯2.拖拽控件⾄ ui 界⾯窗⼝并修改内容3.构建并运行 二、通过代码的方式&#xff0c;通过编写代码&#xff0c;在界面上创建控件&#xff0c;显示hello world在Widget…

AIGC提示词(2):塑造未来内容创作的核心力量

引言 &#x1f31f; 在这个数字化的时代&#xff0c;人工智能生成内容&#xff08;AIGC&#xff09;正变得越来越普遍。从自动写作到图像生成&#xff0c;AI正以前所未有的速度和多样性创造内容。然而&#xff0c;要实现高质量和相关性强的内容生成&#xff0c;关键在于有效地…

已成功入职小米大模型岗!!大模型面试其实挺水的,hr听到这些直接过

小米大模型面试180题 1、目前比较受欢迎的开源大模型有哪些&#xff1f; GPT系列&#xff1a;由OpenAl开发的生成式预训练模型&#xff0c;如 GPT-3。 BERT系列&#xff1a;由Google开发的转换式预训练模型&#xff0c;如BERT、RoBERTa等。 T5系列&#xff1a;由Google开发的基…

003、架构_详解(重点)

GoldenDB 分布式数据库框架 DN和RDB增加了备节点;引入新模块CM,且GTM、MDS、PM、CM都增加备节点;MDS、PM、CM、RDB被统一在了管理节点之中;GTM和MDS间多了一条连线,因为GTM的切换由MDS把控;初步系统架构mysqld:一般称为DB节点,负责单个节点的数据处理; dbproxy:一般…

Gitee上传项目(从0开始)

1.默认你Git已经下载好的情况下。 下载好的两种显示&#xff1a; 1.右击桌面显示这个 2.如果没有情况1出现&#xff0c;需要自己去创建快捷方式 2.去网站创建仓库 网站参考&#xff1a;yanyongzhitest/java_web - 码云 - 开源中国 (gitee.com) 新建仓库&#xff1a; 仓库名…

版本管理工具 Git 的下载安装及使用

1 基本介绍 Git 是目前最流行的分布式版本控制软件 什么是分布式版本控制软件&#xff1f; 所有版本信息仓库全部同步到本地的每个用户可以在本地查看所有版本历史&#xff0c;可以离线在本地提交&#xff0c;只需在连网时 push 到相应的服务器或其他用户那里。每个用户那里…