Launcher3 定制桌面行列数

Android13 Launcher3修改Workspace布局(layout) 修改Workspace的图标的数量、图标大小、图标之间的间隙、热座图标数量、整体布局、图标与文字间的间隙等 阅读详情

一.Launcher3默认显示行列数是通过device_profiles.xml这个文件配置的,文件内容是


<profiles xmlns:launcher="http://schemas.android.com/apk/res-auto" >

    <profile
        launcher:name="Super Short Stubby"
        launcher:minWidthDps="255"
        launcher:minHeightDps="300"
        launcher:numRows="2"
        launcher:numColumns="3"
        launcher:numFolderRows="2"
        launcher:numFolderColumns="3"
        launcher:minAllAppsPredictionColumns="3"
        launcher:iconSize="248"
        launcher:iconTextSize="13.0"
        launcher:numHotseatIcons="3"
        launcher:defaultLayoutId="@xml/default_workspace_3x3"
        />

    <profile
        launcher:name="Shorter Stubby"
        launcher:minWidthDps="255"
        launcher:minHeightDps="400"
        launcher:numRows="3"
        launcher:numColumns="3"
        launcher:numFolderRows="3"
        launcher:numFolderColumns="3"
        launcher:minAllAppsPredictionColumns="3"
        launcher:iconSize="48"
        launcher:iconTextSize="13.0"
        launcher:numHotseatIcons="3"
        launcher:defaultLayoutId="@xml/default_workspace_3x3"
        />

    <profile
        launcher:name="Short Stubby"
        launcher:minWidthDps="275"
        launcher:minHeightDps="420"
        launcher:numRows="3"
        launcher:numColumns="4"
        launcher:numFolderRows="3"
        launcher:numFolderColumns="4"
        launcher:minAllAppsPredictionColumns="4"
        launcher:iconSize="48"
        launcher:iconTextSize="13.0"
        launcher:numHotseatIcons="5"
        launcher:defaultLayoutId="@xml/default_workspace_4x4"
        />

    <profile
        launcher:name="Stubby"
        launcher:minWidthDps="255"
        launcher:minHeightDps="450"
        launcher:numRows="3"
        launcher:numColumns="4"
        launcher:numFolderRows="3"
        launcher:numFolderColumns="4"
        launcher:minAllAppsPredictionColumns="4"
        launcher:iconSize="48"
        launcher:iconTextSize="13.0"
        launcher:numHotseatIcons="5"
        launcher:defaultLayoutId="@xml/default_workspace_4x4"
        />

    <profile
        launcher:name="Nexus S"
        launcher:minWidthDps="296"
        launcher:minHeightDps="491.33"
        launcher:numRows="4"
        launcher:numColumns="4"
        launcher:numFolderRows="4"
        launcher:numFolderColumns="4"
        launcher:minAllAppsPredictionColumns="4"
        launcher:iconSize="48"
        launcher:iconTextSize="13.0"
        launcher:numHotseatIcons="5"
        launcher:defaultLayoutId="@xml/default_workspace_4x4"
        />

    <profile
        launcher:name="Nexus 4"
        launcher:minWidthDps="359"
        launcher:minHeightDps="567"
        launcher:numRows="4"
        launcher:numColumns="4"
        launcher:numFolderRows="4"
        launcher:numFolderColumns="4"
        launcher:minAllAppsPredictionColumns="4"
        launcher:iconSize="54"
        launcher:iconTextSize="13.0"
        launcher:numHotseatIcons="5"
        launcher:defaultLayoutId="@xml/default_workspace_4x4"
        />

    <profile
        launcher:name="Nexus 5"
        launcher:minWidthDps="335"
        launcher:minHeightDps="567"
        launcher:numRows="4"
        launcher:numColumns="4"
        launcher:numFolderRows="4"
        launcher:numFolderColumns="4"
        launcher:minAllAppsPredictionColumns="4"
        launcher:iconSize="54"
        launcher:iconTextSize="13.0"
        launcher:numHotseatIcons="5"
        launcher:defaultLayoutId="@xml/default_workspace_4x4"
        />

    <profile
        launcher:name="Large Phone"
        launcher:minWidthDps="406"
        launcher:minHeightDps="694"
        launcher:numRows="5"
        launcher:numColumns="5"
        launcher:numFolderRows="4"
        launcher:numFolderColumns="4"
        launcher:minAllAppsPredictionColumns="4"
        launcher:iconSize="56"
        launcher:iconTextSize="14.4"
        launcher:numHotseatIcons="5"
        launcher:defaultLayoutId="@xml/default_workspace_5x5"
        />

    <profile
        launcher:name="Nexus 7"
        launcher:minWidthDps="575"
        launcher:minHeightDps="904"
        launcher:numRows="5"
        launcher:numColumns="6"
        launcher:numFolderRows="4"
        launcher:numFolderColumns="5"
        launcher:minAllAppsPredictionColumns="4"
        launcher:iconSize="64"
        launcher:iconTextSize="14.4"
        launcher:numHotseatIcons="7"
        launcher:defaultLayoutId="@xml/default_workspace_5x6"
        />

    <profile
        launcher:name="Nexus 10"
        launcher:minWidthDps="727"
        launcher:minHeightDps="1207"
        launcher:numRows="2"
        launcher:numColumns="3"
        launcher:numFolderRows="4"
        launcher:numFolderColumns="5"
        launcher:minAllAppsPredictionColumns="4"
        launcher:iconSize="76"
        launcher:iconTextSize="14.4"
        launcher:numHotseatIcons="7"
        launcher:defaultLayoutId="@xml/default_workspace_5x6"
        />

    <profile
        launcher:name="20-inch Tablet"
        launcher:minWidthDps="1527"
        launcher:minHeightDps="2527"
        launcher:numRows="7"
        launcher:numColumns="7"
        launcher:numFolderRows="6"
        launcher:numFolderColumns="6"
        launcher:minAllAppsPredictionColumns="4"
        launcher:iconSize="100"
        launcher:iconTextSize="20.0"
        launcher:numHotseatIcons="7"
        launcher:defaultLayoutId="@xml/default_workspace_5x6"
        />

</profiles>

二.该配置文件是在InvariantDeviceProfile类的getPredefinedDeviceProfiles方法加载

 ArrayList<InvariantDeviceProfile> getPredefinedDeviceProfiles(Context context) {
        ArrayList<InvariantDeviceProfile> profiles = new ArrayList<>();
        try (XmlResourceParser parser = context.getResources().getXml(R.xml.device_profiles)) {
            final int depth = parser.getDepth();
            int type;

            while (((type = parser.next()) != XmlPullParser.END_TAG ||
                    parser.getDepth() > depth) && type != XmlPullParser.END_DOCUMENT) {
                if ((type == XmlPullParser.START_TAG) && "profile".equals(parser.getName())) {
                    TypedArray a = context.obtainStyledAttributes(
                            Xml.asAttributeSet(parser), R.styleable.InvariantDeviceProfile);
                    int numRows = a.getInt(R.styleable.InvariantDeviceProfile_numRows, 0);
                    int numColumns = a.getInt(R.styleable.InvariantDeviceProfile_numColumns, 0);        Log.e("TAG", ">>>>>>>>>>>3>>>>"+numColumns+"#"+a.getString(R.styleable.InvariantDeviceProfile_name));
                    float iconSize = a.getFloat(R.styleable.InvariantDeviceProfile_iconSize, 0);
                    profiles.add(new InvariantDeviceProfile(
                            a.getString(R.styleable.InvariantDeviceProfile_name),
                            a.getFloat(R.styleable.InvariantDeviceProfile_minWidthDps, 0),
                            a.getFloat(R.styleable.InvariantDeviceProfile_minHeightDps, 0),
                            numRows,
                            numColumns,
                            a.getInt(R.styleable.InvariantDeviceProfile_numFolderRows, numRows),
                            a.getInt(R.styleable.InvariantDeviceProfile_numFolderColumns, numColumns),
                            a.getInt(R.styleable.InvariantDeviceProfile_minAllAppsPredictionColumns, numColumns),
                            iconSize,
                            a.getFloat(R.styleable.InvariantDeviceProfile_landscapeIconSize, iconSize),
                            a.getFloat(R.styleable.InvariantDeviceProfile_iconTextSize, 0),
                            a.getInt(R.styleable.InvariantDeviceProfile_numHotseatIcons, numColumns),
                            a.getResourceId(R.styleable.InvariantDeviceProfile_defaultLayoutId, 0),
                            a.getResourceId(R.styleable.InvariantDeviceProfile_demoModeLayoutId, 0)));
                    a.recycle();
                }
            }
        } catch (IOException|XmlPullParserException e) {
            throw new RuntimeException(e);
        }
        return profiles;
    }

 

Launcher图标加载流程二 阅读详情

相关推荐

【 OpenHarmony 4.1 Launcher 魔改之路 】-- 桌面布局定制

阅读本篇文章之前,有几个需要说明一下: 1. 调试设备:平板,如果你是开发者手机,一样可以加 Log 调试,源码仍然是手机和平板一起分析; 2. 文章中的 Log 信息所显示的数值可能跟你的设备不一样,以你调试的数据为准。 3. 装个逼:目前好像 OH 社区或者其它开发者还没有针对 OH 的系统应用,比如 Launcher 写过非常深入的源码解析类文章,所以此类文章,**仅供大家参考学习,如转载或引用,请标明出处**!

Fucking Android & Compose & Harmony & Spring Boot ... 2040

Launcher3 UI初始化 布局的动态设置

一.Launcher3中各个控件的大小在不同的设备上,初始化大小是不一样的,为了屏幕适配,需要动态的去设置布局大小,布局大小的设置是在Launcher3的onCreate方法中,调用了mDeviceProfile.layout(this, false),代码是: public void layout(Launcher launcher, boolean notifyListeners) { ...

yuemingxingxing的博客 576

安卓13 Launcher3 深度定制:从DeviceProfile解析到布局实战

本文深入解析了安卓13 Launcher3深度定制的核心——DeviceProfile机制。通过剖析DeviceProfile.java与device_profiles.xml的联动原理,并结合实战案例(如将6x5网格修改为7x6布局、调整搜索框与预设默认应用),系统性地指导开发者掌握Launcher主页布局的自定义与适配技巧,解决多屏幕适配中的常见问题。

whisky的博客 911

修改android N 的Launcher3桌面显示的行数列数

修改android N 的Launcher3桌面显示的行数列数在InvariantDeviceProfile中会根据屏幕的不同去动态适配应用图标和字体和行列数。InvariantDeviceProfile(Context context) { WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_

yxdspirit的专栏 2480

安卓13 Launcher3自定义布局全攻略:从修改行列数到隐藏Hotseat

本文详细介绍了安卓13 Launcher3的深度定制方法,包括修改行列数、隐藏Hotseat等高级布局技巧。通过解析关键配置文件和实战步骤,帮助开发者实现从基础到高级的主页布局定制,提升用户界面体验和操作效率。

weixin_29309213的博客 228

Android Launcher3深度定制指南:从源码解读到实战优化

Launcher作为Android系统的核心用户界面,其定制开发涉及系统框架与应用层的深度交互。理解其模块化架构与数据加载原理,是进行功能扩展与性能优化的基础。在Android 10/11版本中,手势导航集成、作用域存储适配等新特性,进一步提升了定制的技术价值。本文聚焦于Launcher3的深度定制,通过解析核心模块如CellLayout、InvariantDeviceProfile及QuickStep,并结合实战案例,系统阐述如何实现桌面网格调整、手势交互优化等定制需求,为ROM定制与系统开发提供工程实践

weixin_34268843的博客 391

Android Launcher3 修改行数和列数

从R.xml.device_profiles这个文件中读取数据。修改 numHotseatIcons的数量即可。根据屏幕尺寸设置不同的布局。

xiaowang_lj的博客 927

Android13 Launcher3深度定制:从静态布局到动态管理的进阶实践

本文深入探讨了Android13 Launcher3的深度定制实践,从静态布局到动态管理的进阶技术。通过解析Launcher3的架构调整、布局文件定制、动态图标管理及性能优化等核心要点,帮助开发者掌握自定义桌面应用的关键技术,提升开发效率与用户体验。

weixin_31102231的博客 184

Launcher定制

1. 修改Launcher中显示的预置app default_workspace.xml packageName:包名 className :在桌面上显示的activity screen : 在哪一个screen添加 x,y: 在screen中的位置 2. 修改屏幕数目(

pgalxx的专栏 3709

实战避坑:Launcher3文件夹定制全攻略(9宫格、透明背景、固定网格布局)

本文详细解析了Android系统Launcher3文件夹的深度定制开发技巧,包括九宫格缩略图、透明背景和固定网格布局的实现方案。通过核心类分析和实战代码示例,帮助开发者避免常见问题,提升定制效率,特别适用于Android10及以上版本的系统开发。

weixin_30379531的博客 415

Android13 Launcher3桌面布局自定义指南:从图标大小到边距调整的完整配置

本文提供了一份Android 13 Launcher3桌面布局深度自定义的实战指南。文章详细解析了Launcher3的核心架构,并重点指导如何通过修改device_profiles.xml配置文件,实现对Workspace网格、图标大小、边距等参数的像素级调整,从而打造个性化桌面体验。

weixin_29159441的博客 327

最优化方法 25:PDHG

前面的章节要么从原始问题出发,要么从对偶问题出发,通过求解近似点或者一个子优化问题进行迭代,而且推导过程中我们发现根据问题的参数特征,比如矩阵 AAA 是瘦高型的还是矮胖型的,采用对偶和原始问题的复杂度会不一样,可以选择一个更简单的。而这一节,我们将要从原始对偶问题出发来优化,什么是原始对偶问题呢?就是原始优化变量和对偶优化变量(原始函数和共轭函数)混合在一块,看下面的原理就知道了。 1. 原始对偶问题 现在考虑原始优化问题,其中 f,gf,gf,g 为闭凸函数 min⁡f(x)+g(Ax) \min \q

Glooow的博客 4601

Android13 Launcher3桌面布局魔改指南:从6x3到自定义行列的完整实战

本文详细解析了Android13 Launcher3桌面布局的深度定制方法,从基础的行列配置修改到异形屏适配实战。通过调整device_profiles.xml和default_workspace.xml等核心配置文件,开发者可以实现从6x3到自定义行列的布局魔改,并解决刘海屏、挖孔屏等异形屏的适配问题。

weixin_28273593的博客 377

Mplus—验证性因素分析(Confirmatory Factor Analysis, CFA)

介绍一阶和二阶验证性因素分析概况及在Mplus中的操作方法。

m0_54401011的博客 1万+

2019美亚杯团体赛刷题 部分题解(1-42、106-116)

文章目录写在前面使用工具刷题1.在黑客路由器里,有一台设备的MAC地址为00:11:6B:47:4D:55,请问它的IP地址是什么?2.在黑客路由器里,发现一设备的IP地址为192.168.0.103,请问该设备为如下哪一个:3.警方已经查证所有连接此router的设备都归黑客所有,根據黑客路由器的訊息,下列哪组(设备---ip)是错误的:4.Hacker现场检获的Windows主机硬盘已成功取证并制作成镜像Win1.E01,下列哪个是其硬盘证据文件的MD5哈希值。5.MD5hash算法会产生一个什么大小的

7ruth0hn的博客 7547

Android 13 Launcher3 桌面布局修改实战:从数格子到改XML的保姆级避坑指南

本文详细解析了Android 13中Launcher3桌面布局的定制方法,从基础架构到高级技巧,提供从数格子到改XML的完整指南。通过实战案例和避坑建议,帮助开发者高效完成桌面布局修改,实现个性化定制。

349

UWB定位进阶:如何利用DW1000的CIR数据做NLOS信号识别?

本文深入探讨了如何利用DW1000芯片的信道脉冲响应(CIR)数据进行非视距(NLOS)信号识别,以提升UWB定位精度。通过分析CIR数据的核心价值、预处理方法、特征提取技术以及机器学习模型构建,为研究人员和工程师提供了实用的解决方案,帮助克服室内定位中的NLOS挑战。

weixin_28729205的博客 474

告别抽屉和Hotseat!Android 11 Launcher3桌面改造实战:打造类iOS的单层桌面体验

本文详细介绍了如何将Android 11的Launcher3从默认的双层抽屉式桌面改造为类iOS的单层桌面体验。通过深度解析Launcher3核心架构,逐步实现移除抽屉界面、消除Hotseat常驻栏以及重构应用加载逻辑等关键步骤,帮助开发者为特定硬件打造更简洁高效的单层桌面解决方案。

weixin_30505225的博客 365

树莓派5新手必看:保姆级ibus中文输入法安装与配置全流程(含.bashrc设置避坑)

本文详细介绍了在树莓派5上安装和配置ibus中文输入法的完整流程,包括系统环境准备、ibus框架安装、图形界面配置及常见问题解决方案。通过清晰的步骤说明和避坑指南,帮助新手快速实现中文输入功能,提升开发效率。

weixin_29159441的博客 530

Yolov8-pose关键点检测:通用倒瓶颈(UIB)搜索块结合C2f二次创新 | 轻量化之王MobileNetV4

通用倒瓶颈(UIB)搜索块结合C2f二次创新

①答疑群聊服务;②YOLO大模型知识问答系统;③计算机视觉论文生成智能体; 613

Android 13 Launcher3深度定制实战:打造16宫格默认文件夹的终极指南

本文详细讲解如何将Android 13 Launcher3默认文件夹布局改造为16宫格(4x4)。首先分析Launcher3架构,重点介绍文件夹相关的核心组件(Workspace、CellLayout、FolderPagedView等)。然后提供两种具体实现方案:1)修改DeviceProfile全局配置(推荐);2)直接调整FolderPagedView行列数。文章包含环境搭建、源码剖析、XML配置、动画优化等内容,并通过完整的代码修改清单和测试用例指导实践。最后还探讨了进阶优化方向和其他定制场景的拓展思

油墨香^-^的博客 400

matlab数学建模练习(2)练习电子科技大学数学实验

【代码】matlab数学建模练习(2)练习电子科技大学数学实验。

c_wrj_的博客 1435

Android 13 Launcher3 桌面大改造:手把手教你修改默认布局文件,替换预装应用

本文详细介绍了如何在Android 13中深度定制Launcher3桌面,包括修改默认布局文件和替换预装应用。通过解析Launcher3的架构、定位布局文件、设备特性适配以及编译部署等步骤,帮助开发者实现个性化的桌面定制。文章还提供了常见问题解决方案和高级定制技巧,适合系统开发者和ROM定制者参考。

weixin_33137081的博客 323

silero-vad 训练自己的数据

silero-vad 训练自己的数据

jacke121的专栏 816

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Android13-修改主界面apk摆放位置(Launcher3)

Android13-修改主界面apk摆放位置(Launcher3)

李予浙的博客 2232

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

上一篇: Launcher3 Widget拖拽到桌面的流程分析
下一篇: Launcher3 怎么创建一个Widget
网络卷毛
博客等级 码龄14年 13粉丝 129原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值