Android 21天学习之三

博主分享了Android10 Launcher3中app列表按安装时间排序的实现,通过分析源码了解到默认是按名字排序,但可以改为按安装时间。同时,展示了如何修改源码以改变每页列表的行数和列数,但遇到显示问题,即在最大显示尺寸下,app图标和名称间距过小。

活动地址:CSDN21天学习挑战赛

学习日记

1,学习博文

《Android 10.0 Launcher3 app列表页桌面图标按安装时间排序app图标》:Android 10.0 Launcher3 app列表页桌面图标按安装时间排序app图标_安卓兼职framework应用工程师的博客-CSDN博客

2,知识点

1. Launcher3菜单页app排序方式

        作者向我们分享了Launcher3 列表页app排序方式的代码段,在文件packages/apps/Launcher3/src/com/android/launcher3/allapps/AlphabeticalAppsList.java的onAppsUpdated()中的Collections.sort(mApps, mAppNameComparator)方法排序app列表。具体的比较逻辑则在packages/apps/Launcher3/src/com/android/launcher3/allapps/AppInfoComparator.java中实现。通过分析原生代码可以了解,Launcher3默认是根据app的名字进行排序的。作者向我们分享了如何根据包名获取安装时间的方法,然后根据APP的安装时间进行排序。

3,学习的收获

        因为工作目前对Launcher3的修改定制涉及很少,所以对Launcher3乃至桌面应用可以说是基本没有了解。通过学习作者的博文能够拓展了我的知识点,使自己能够不局限于工作内容上。在之后的空余时间可以学习相关博文或其他资料来进一步丰富相关知识。

4,实操

        因为对Launcher3没有怎么了解,所以就简单分析了下APP列表的基本布局,非常简单的实现了对每页列表显示apps的行数和列数进行修改。

packages/apps/Launcher3/src/com/android/launcher3/InvariantDeviceProfile.java(Android9)

diff --git a/packages/apps/Launcher3/src/com/android/launcher3/InvariantDeviceProfile.java b/packages/apps/Launcher3/src/com/android/launcher3/InvariantDeviceProfile.java
index df77c4ed00..51761e4d72 100755
--- a/packages/apps/Launcher3/src/com/android/launcher3/InvariantDeviceProfile.java
+++ b/packages/apps/Launcher3/src/com/android/launcher3/InvariantDeviceProfile.java
@@ -143,6 +143,7 @@ public class InvariantDeviceProfile {
        InvariantDeviceProfile closestProfile = closestProfiles.get(0);
-       numRows = closestProfile.numRows;
-       numColumns = closestProfile.numColumns;
        numHotseatIcons = closestProfile.numHotseatIcons;
+       numColumns = 8;
        numHotseatIcons = numColumns;
+       numRows = 5;
        defaultLayoutId = closestProfile.defaultLayoutId;
        demoModeLayoutId = closestProfile.demoModeLayoutId;
        numFolderRows = closestProfile.numFolderRows;
        numFolderColumns = closestProfile.numFolderColumns;

        iconSize = interpolatedDeviceProfileOut.iconSize;
        landscapeIconSize = interpolatedDeviceProfileOut.landscapeIconSize;
        iconBitmapSize = Utilities.pxFromDp(iconSize, dm);
        iconTextSize = interpolatedDeviceProfileOut.iconTextSize;
        fillResIconDpi = getLauncherIconDensity(iconBitmapSize);

通过分析源码发现列表显示apps的行数和列数最后调用的是变量numRows和numColumns,所以只要将numRows和numColumns更改为自己想要的值就行了。

​5, 问题

基于Android9源码

发现在设置里将显示大小改到最大时,会出现app图表和app名称紧贴在一起或app名称显示一半的情况。通过修改显示的行数可以避开该情况,不知道有没有其他方式解决呢?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值