Android10/11 原生Launcher3深度定制开发

article/2025/11/7 3:15:52

一、引言

        关于Android10和11系统Launcher3的定制有很多,根据项目的需求会进行各种定制开发,

        于是就需要研究Launcher3的源码。本文主要从Android 11的Launcher3QuickStep着手

        (go版本或者其他版本类似)从常用的修改进行分析,首先就得大致理解 Launcher3各个

        类的作用。

        1.1、常用类简述

                1. BaseIconFactory.java:Launcher图标的工厂类,控制图标UI展示(图标白边控制)

                    Android8,9,10可能在其他类,可以全局搜索normalizeAndWrapToAdaptiveIcon方法

                    差不多一样的逻辑。

                2. OverviewToAllAppsTouchController.java:横向控制抽屉式All应用界面的触摸类。

                3. PortraitStatesTouchController.java:竖向控制抽屉式All应用界面的触摸类。

                4. BubbleTextView.java:Launcher所有图标文字显示的父类,包括文字的大小,文字

                     刷新的的父类。

                5. CellLayout.java:Launcher布局的计算类,图标的显示边距等,组成workspace

                    的view,继承自viewgroup,既是一个dragSource又是一个dropTarget,可以将它里面

                    的item拖出去,也可以容纳拖动过来的item。在workspace_screen里面定了一些它

                    的view参数。

                6. SecondaryDropTarget.java:长按APP图标的操作类,对图标进行移动、删除、

                     移除、取消、卸载等操作。

                7. DeviceProfile.java:图标大小、各个图标间距,布局等计算实体类,可配置各个参数

                    的全局变量。

                8. Launcher.java: launcher主要的activity,是launcher桌面第一次启动的activity,UI的

                    主要入口。

                9. Workspace.java: 抽象的桌面。由N个cellLayout组成,从cellLayout更高一级的层面上

                    对事件的处理。

                10. ClippedFolderIconLayoutRule.java: 文件夹图标内部显示小图标缩略图的计算类

                      ,常见4宫格9宫格显示的实现类。

                11. FolderGridOrganizer.java: 展开文件夹显示的计算逻辑类,文件夹图标呈现是网格

                     状,此类主要给文件夹各应用图标制定显示规则,比如3*4,4*4。

                12. LoaderTask.java: 加载各个模块Task的显示类,如workspace工作区icon、all工作

                      区icon初始化工作。

                13. PackageUpdatedTask.java: PMS安装应用后更新Launcher3图标及逻辑的实现类。

                14. device_profiles.xml:默认Launcher的网格配置,主要包括一下几点:

                       a. workspace的行和列;

                       b. 文件夹中配置的行和列;

                       c. 图标大小;

                       d. 图标名称文字大小;

                       e. 默认选择加载哪个网格xml的配置文件。

                15. default_workspace_xxx.xml/partner_default_layout.xml:默认排序各个图标位

                    置的配置文件,包括文件夹默认创建显示及位置。

                16. folder_shapes.xml:默Workspace工作区图标的圆角大小控制配置文件。

        1.2、此文涉及修改点 

                1. 去除抽屉功能,屏蔽上拉事件与指示UI;

                2. 去除hotseat功能,包括UI的显示与拖拉事件的修改;

                3. 去除文件夹背景,以壁纸为背景;

                4. 预制及安装的应用快捷图标默认显示在Workspace区;

                5. 制定预制应用默认快捷图标在桌面显示的位置(Workspace以网格形式进行摆设),

                    出厂默认显示文件夹图标及功能;

                6. Workspace和ALL界面及文件夹展开界面图标大小,间距的定制(固定大小);

                7. Workspace显示图标名称,字体的大小间距调整;

                8. 文件夹图标9宫格的显示;

                9. 文件夹图标名字显示,图标圆角,背景透明;

                10. 展开的文件夹多个分页名称居中,靠左显示,窗口居中,背景圆角,图标固定模板

                      网格显示(如3*4);

                11. 长按卸载APP的修改,防卸载功能控制,图标白边;

二、功能点阐述及修改

        2.1、去除抽屉功能

                Launcher3的抽屉功能其实就是手指滑动底部屏幕显示出一个展示所有app快捷图标入口

                的界面,根据需要,如需要去除此界面及功能,有很多方式,此次介绍最简单的方式,

                就是屏蔽手指上划事件,达到去除此功能的效果,修改如下:

                1. 竖向抽屉修改点:

                        事件派发控制在PortraitStatesTouchController类的canInterceptTouch方法

                        

                2. 横向抽屉修改点:

                        事件派发控制在OverviewToAllAppsTouchController类的canInterceptTouch方法

                        

        2.2、去除hotseat功能

                hotseat功能就是底部一排应用快捷按钮,可放置各个应用图标及文件夹图标,支持默认

                预制应用、拖拉移除、合并成文件夹等功能,现常见的做法为移除此栏,所有图标在

                Workspace区域显示,去除此功能修改点如下:

                1. hotseat.xml布局文件中修改width为1dp与height为0dp:

                        

                2. Hotseat.java实现类的构造方法及刷新时GONE布局,去除工作区移动APP到

                    hotseat区域后图标显示在hotseat区域逻辑,修改点如下:

                        

                        

                        

                3. Launcher.java初始化控件的setupViews方法中GONE布局:

                        

                4. LauncherPreviewRenderer.java 的MainThreadRenderer内部类中GONE布局:

                        

        2.3、去除文件夹背景

                文件夹缩率图背景和展开文件夹背景根据系统值或者主题设置成纯色的,不美观,根据

                需要可修改被壁纸默认的背景,比较美观大方,修改点如下:

                        FolderAnimationManager.java 类的getAnimator方法中屏蔽背景的设置,变量

                        mFolderBackground设置背景,如图:

                        

        2.4、系统预制应用显示在Workspace工作区

                Launcher3默认情况系统预制应用显示在all工作区,Workspace区只显示xml配置中显示

                的几个图标,如需要预制应用都显示Workspace工作区,需要做以下修改:

                        LoaderTask.java类中的run方法把加载的应用添加到workspace工作区

                        

                 

        2.5、安装的应用显示在Workspace工作区

                Launcher3默认情况安装的应用显示在all工作区,如需在安装的应用在workspace工作区

                显示,需要添加新逻辑把应用添加到workspace工作区,修改如下:

                        1. PackageUpdatedTask.java类添加updateToWorkSpace方法,此方法实现安装的

                            APP添加到workspace工作区的逻辑:

                        

                        

                        2. execute方法中添加updateToWorkSpace方法更新APP显示到workspace工作区

                             

        2.6、应用默认显示位置

                        1. device_profiles.xml文件中配置图标显示的矩阵(包括文件夹),图标大小及图标名

                            称大小等配置

                            
                        2.创建一个default_workspace_4x5.xml(名称根据需求定义),在device_profiles.xml

                           文件中引用此xml

                            

        2.7、工作区、展开文件夹固定图标大小及固定图标间距

                        1. DeviceProfile类的updateIconSize方法修改workspace工作区图标的大小:

                                     iconSizePx表示图标大小,可重新赋值;

                                     iconTextSizePx表示图标大小,可重新赋值;

                                     folderIconSizePx表示文件夹图标大小,可重新赋值;

                        2. DeviceProfile类的updateFolderCellSize方法修改展开文件夹图标的小及间距:

                                     folderChildIconSizePx表示展开文件夹内图标大小,可重新赋值;   

                                     folderChildTextSizePx表示展开文件夹内图标文字大小,可重新赋值;       

                                     folderCellWidthPx表示展开文件夹内图标横向间距,可重新赋值;

                                     folderCellHeightPx表示展开文件夹内图标竖向间距,可重新赋值;

                        3. ShortcutAndWidgetContainer类的layoutChild方法修改展开文件夹框上下边距:

                                     childLeft表示展开文件夹内展示的矩形框左边距,可重新赋值; 

                                     childTop表示展开文件夹内展示的矩形框上边距,可重新赋值;                      

        2.8、文件夹图标9宫格

                        1. ClippedFolderIconLayoutRule类实现九宫格功能

                                     MAX_NUM_ITEMS_IN_PREVIEW变量表示显示几个缩略图标,改为9

                                     MIN_SCALE变量表示缩略图标最小大小,改为0.22f

                                     MAX_SCALE变量表示缩略图标最大大小,改为0.22f(不做伸缩)

                                     scaleForItem函数固定缩略图标大小:

                                     

                                     getPosition函数计算缩略图图标排序,对函数进行重写:

                                     

                                     computePreviewItemDrawingParams函数控制缩略图图标排序

                        ​​​​​​​             ​​​​​​​

                        2. FolderGridOrganizer类对isItemInPreview函数进行重写

                                     

 

        2.9、展开的文件夹图标名字显示,图标圆角            

                        1. 文件夹图标名字显示

                                    Folder类的onFinishInflate函数修改文字参数

        ​​​​​​​        ​​​​​​​        ​​​​​​​            

                                    FolderIcon类的inflateIcon函数修改逻辑

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​    

                        2. 文件夹图标圆角配置

                                    folder_shapes.xml文件配置参数

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​     

                        3. 文件夹背景透明

                                  FolderAnimationManager类的构造方法屏蔽mFolderBackground赋值

                                    

                                  FolderAnimationManager类的getAnimator函数屏蔽mFolderBackground赋值

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​     

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​    

                                  FolderIcon类的dispatchDraw函数屏蔽mBackground变量赋值

                                                                

 

        3.0、展开的文件夹多个知识点修改                             

                       1. 多个分页文件夹名称居中

                                     FolderPagedView类的arrangeChildren函数修改逻辑

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​     

                        2. 靠左显示

                                     CellLayout类的onLayout函数修改逻辑

                                     

                        3. 窗口居中

                                     Folder类的centerAboutIcon函数lp.x和lp.y变量为矩形框坐标,参数说明

                                             720为屏幕分辨率的横向尺寸

                                             1600为屏幕分辨率的竖向尺寸

                                             24为状态栏尺寸

                                             48为导航栏尺寸

                                             ​​​​​​​

                                      Folder类的getContentAreaHeight函数固定矩形框高度

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​     

                                      FolderPagedView类的getDesiredWidth函数固定矩形框宽度

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​     

                        4. 背景圆角

                                     PreviewBackground类的getScaledRadius函数修改圆角大小

                                      

                        5. 图标固定模板网格显示(如3*4)

                                     FolderGridOrganizer类对calculateGridSize函数进行从写,屏蔽原生逻辑

                                     

                                    此函数中添加新计算逻辑

                                     ​​​​​​​

        3.1、长按卸载APP的修改,防卸载功能控制,图标白边

                        1. 长按卸载的修改

                                     DeleteDropTarget类对setTextBasedOnDragSource函数进行修改

                                      

                                     DeleteDropTarget类对setControlTypeBasedOnDragSource函数进行修改

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​     

                                     DeleteDropTarget类添加isCanDrop函数,提供判断

                                     

                                     DeleteDropTarget类对completeDrop函数进行修改,屏蔽Snackbar.show   

                                     ​​​​​​​

                                     DeleteDropTarget类对onAccessibilityDrop函数进行修改

                                     

                                     DragController类对drop函数进行修改

                                     

                                     DragController类添加函数isNeedCancelDrag

                                     

                         2. 防卸载功能控制

                                    SecondaryDropTarget类对supportsAccessibilityDrop函数进行修改

                   ​​​​​​​        ​​​​​​​        ​ ​​​​​

                         3. 图标去白边 

                                    BaseIconFactory类对normalizeAndWrapToAdaptiveIcon函数进行修改

                                                                                            

 三、总结

        Launcher3的定制根据项目需求有各个点的修改,要随心所欲对其修改还需要理解其框架,以

        大的方向去看问题,角度不一样解决问题的思路会豁然开朗。后续还有更多关于Launcher3、

        原生Settings、SystemUI等系统应用以及framework端的博客,我主要做framework的开发工

        作,后续以framework博客为主,涉及的平台有rk、紫光展讯zr、全志、MTK、高通平台。


http://chatgpt.dhexx.cn/article/oZLVOrsZ.shtml

相关文章

Launcher3-桌面布局+主要的类+启动流程

一、launhcer3桌面布局二、launcher3主要的类LauncherModel:BubblTextView:DragController:LauncherAppState:DragView:DragSource,DropTarget:Folder:FolderIcon:Launch…

Launcher3--初识Launcher3

一、Launcher简介 Launcher时开机完成后第一个启动的应用,用来展示应用列表和快捷方式、小部件等。Launcher作为第一个(开机后第一个启动的应用)展示给用户的应用程序,其设计的好坏影响到用户的体验,甚至影响用户购机的判断。所以很多品牌厂商…

Android Launcher3分析及定制主题实现

一. Launcher3 简介 **launcher3是在Launcher2的基础上进化的版本,从Android 4.4 开始就使用Launcher3 .(kk版,kk2版)作为桌面使用,以前我们都在使用Launcher2,我们使用的是KK版本,具体区别后面再说. ** 1 Launcher3 桌面变成了动态管理,launcher2 里面默认最多加载五个worksp…

Android Launcher3简介

一.Launcher3概述 Launcher顾名思义,就是桌面的意思,也是android系统启动后第一个启动的应用程序,这里以android11为例,和其他应用并无区别,只是增加了对其他app和widget的管理窗口,且可以为用户定制化一些…

详细理解准确率、精准率、召回率,F1值等评价指标的含义

转载文章 原博客地址:详解准确率、精确率、召回率、F1值等评价指标的含义 机器学习问题之中,通常需要建立模型来解决具体问题,但对于模型的好坏,也就是模型的泛化能力,如何进行评估?我们可以定一些评价指标…

详解准确率、精确率、召回率、F1值等评价指标的含义

机器学习问题之中,通常需要建立模型来解决具体问题,但对于模型的好坏,也就是模型的泛化能力,如何进行评估呢? 很简单,我们可以定一些评价指标,来度量模型的优劣。比如准确率、精确率、召回率、…

分类性能评价指标——精确率,召回率,F1值详细解释

分类性能的评价指标 准确率 准确率是全部参与分类的文本中,与人工分类结果吻合的文本所占的比例。 即:预测与真实标签相同的比例 A c c u r a c y T P T N T P T N F P F N Accuracy\frac{TPTN}{TPTNFPFN} AccuracyTPTNFPFNTPTN​ 精确率 也称…

准确率、精确率、召回率、F1值

1.TP、TN、FP、FN 先粘一个官方形式的。 用新冠来举例理解。下方正方形为样本,其中 圆的部分认定为检测后是阳性的,其余部分为检测为阴性的(但是现在的情况是检测并不完全准确,有可能检测时阴性,但实际上已经有新冠…

机器学习中的二分类问题评价指标之精确率、召回率、F1值通俗理解

引言:对于分类问题,我们在评估一个模型的好坏时,通常想到的是把该模型在测试集上分类结果正确的样本数量比上测试集的样本数量的比值结果,即准确率(精确率)作为评价准则。但除此之外,还有精确率…

【转】一些因素对F1值的影响

截自:https://blog.csdn.net/qq_27590277/article/details/88374695 https://blog.csdn.net/qq_27590277/article/details/88367082 一些因素对F1值的影响 如果还没了解F1值的话,这里有我之前写的通俗易懂的文章 详谈P(查准率),R(查全率)&…

keras计算precision、recall、F1值

近期写课程作业,需要用Keras搭建网络层,跑实验时需要计算precision,recall和F1值,在前几年,Keras没有更新时,我用的代码是直接取训练期间的预测标签,然后和真实标签之间计算求解,代码…

F1值(F-Measure)、准确率(Precision)、召回率(Recall) 菜鸡版理解

前置知识: T(True): 正确的 F (False) : 错误的 P (Positive) : 正向的/积极的 N (Negetive): 负向的/消极的 则: TP:正确的 预测了 正向的 FN:错误的 预测了 负向的 FP&#xff1a…

准确率、精确率、召回率、F1值学习笔记

一、TN、TP、TN、FP、FN概念 TP与TN都是分对了情况,TP是正类,TN是负类。则推断出,FP是错误的正类,FN是错误的负类。 举例:我们需要从一个班级中的人中寻找所有女生,如果把这个任务当成一个分类器的话,那么女生就是我们…

为何选用F1值(调和平均数)衡量P与R?

二分类问题的性能度量为何选用 F 1 F_1 F1​ 值? 已知混淆矩阵 prediction positiveprediction negativeactuality positiveTrue Positive(TP)False Negative(FN)actuality negativeFalse Positive(FP)True Negative(TN) 其中:Precise(精…

精确度/召回率/F1值/Micro-F1和Macro-F1的理解

如下图所示,假设有若干张图片,其中12张是狗的图片其余是猫的图片.现在利用程序去识别狗的图片,结果在识别出的8张图片中有5张是狗的图片,3张是猫的图片(属于误报). 图中,…

混淆矩阵、精确率、召回率、F1值、ROC曲线、AUC曲线

假设一个分类器A,分类器A的作用是告诉你一张图片是不是汉堡,我们如果想知道这个分类器的效果到底好不好,如何做? 最简单的方法就是将手机里所有的图片都扔给分类器A看,让分类器告诉我们哪些是汉堡 我们无法直观的看到…

python实现计算精度、召回率和F1值

python实现计算精度、召回率和F1值 摘要:在深度学习的分类任务中,对模型的评估或测试时需要计算其在验证集或测试集上的预测精度(prediction/accuracy)、召回率(recall)和F1值。本文首先简要介绍如何计算精…

模型评价指标—F1值

最近空余时间在参加数字中国创新大赛,比赛规则是根据模型的F1值对参赛者进行排名。为了更深刻地理解这个指标,我最近对它做了一些梳理,现在把它分享给更多有需要的人图片。最近在参赛时也发现了一个问题,就是算法在训练集上完全拟…

精确率、召回率、F1 值、ROC、AUC等分类模型评价指标含义与作用详解

文章目录 摘要一、精确率、召回率、F函数、准确率和错误率1、定义2、区别与应用 二、ROC曲线、P-R曲线、AUC1、P-R曲线2、ROC曲线3、AUC 摘要 在涉及机器学习领域的分类问题时(尤其是衡量推荐系统性能时),经常会遇到诸如准确率、召回率、ROC…

机器学习F1值的概念

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 一、什么是F1-score二、计算过程1.首先定义以下几个概念:2.通过第一步的统计值计算每个类别下的precision和recall3. 通过第二步计算结果计算每个类别下…