Android15 launcher3

修改布局查看device_profiles.xml ,根据不同的网格数加载

java 复制代码
packages/apps/Launcher3/res/xml/device_profiles.xml

<grid-option
    launcher:name="6_by_5"
    launcher:numRows="5"
    launcher:numColumns="6"
    launcher:numSearchContainerColumns="3"
    launcher:numExtendedHotseatIcons="6"
    launcher:numFolderRows="3"
    launcher:numFolderColumns="3"
    launcher:numHotseatIcons="6"
    launcher:numAllAppsColumns="6"
    launcher:isScalable="true"
    launcher:inlineNavButtonsEndSpacing="@dimen/taskbar_button_margin_6_5"
    launcher:devicePaddingId="@xml/paddings_6x5"
    launcher:dbFile="launcher_6_by_5.db"
    launcher:defaultLayoutId="@xml/default_workspace_6x5"
    launcher:deviceCategory="tablet" >

注意device下查看是否有相同的文件

如果需要显示 6*5 的布局需要将这个grid-option 对齐其他地方的文件,不然会不起作用。


上面的属性如 numRows numColumns 在attrs.xml定义  
packages/apps/Launcher3/res/values/attrs.xml
查看 <declare-styleable name="GridDisplayOption">



需要添加6列的Hotseat 不起作用,查看log发现LoaderCursor 有输出error
packages/apps/Launcher3/src/com/android/launcher3/model/LoaderCursor.java
if (item.screenId >= mIDP.numDatabaseHotseatIcons) {

    Log.e(TAG, "Error loading shortcut " + item
            + " into hotseat position screenId=" + item.screenId
            + ", position out of bounds: (0 to " + (mIDP.numDatabaseHotseatIcons - 1)
            + ")");
    return false;
}

//mIDP.numDatabaseHotseatIcons  这个位置一直输出 4,最后只加载4个图标,反追查搜索numDatabaseHotseatIcons 找到位置  InvariantDeviceProfile.java 



追查实例化过程可以查看 numDatabaseHotseatIcons 
packages/apps/Launcher3/src/com/android/launcher3/InvariantDeviceProfile.java
查看实例化方法 initGrid 和 GridOption

AllApp界面拦截apk

packages/apps/Launcher3/src/com/android/launcher3/model/LoaderTask.java

private List<LauncherActivityInfo> loadAllApps() {

......

for (int i = 0; i < apps.size(); i++) {

LauncherActivityInfo app = apps.get(i);

//add

if("com.xxx.packges".equals(apps.get(i).getApplicationInfo().packageName)) {

continue;

}

//add end

......

AppInfo appInfo = new AppInfo(app, mUserCache.getUserInfo(user),

ApiWrapper.INSTANCE.get(mApp.getContext()), mPmHelper, quietMode);

if (Flags.enableSupportForArchiving() && app.getApplicationInfo().isArchived) {

相关推荐
拥小抱11 小时前
Compose 知识点
android
文章永久免费只为良心11 小时前
Web应用安全与防护_第三章_日志文件包含_从一道 CTFshow 题目讲透「日志投毒型 LFI → RCE」:原理、时序陷阱与全变种攻防手册
android·网络安全·渗透测试·漏洞危害·漏洞描述·日志投毒·红队指南
AIsoft_868911 小时前
学术讲座录音如何整理?录音APP可行吗
android·iphone
Patrick在香港14 小时前
一个斜杠,把毫秒变成十几秒
android·数据库·python·性能优化·正则表达式·回溯·redos
海雅达手持终端PDA15 小时前
工业手持终端的“去手机化”演进:看海雅达如何以“同轴扫摄”终结工程妥协,重塑工业PDA新范式
android·物联网·智能手机·硬件工程·能源·制造·iot
booboosui16 小时前
删掉一个住在本机的 agent:8 处要清,顺序不能反
android
hcgeng16 小时前
Android获取崩溃日志
android
aqi0016 小时前
AI编程让鸿蒙开发电子书APP更加快捷
android·华为·harmonyos·鸿蒙·harmony
GY-9317 小时前
【Android】Android Studio 中的协程
android