如何定制Launcher主菜单中应用程序的显示顺序
来源:互联网 发布:java json日期格式化 编辑:程序博客网 时间:2024/05/17 01:57
需求:Launcher主菜单中某些应用程序必须放在最前面的几个位置,且顺序是固定的,切换预研等操作也不能更改其顺序。
修改方案:编辑Launcher2/res/xml/default_toppackage.xml文件
<app launcher:topPackageName="com.yahoo.mobile.client.android.odp" launcher:topClassName="com.yahoo.mobile.client.android.odp.YahooODP" launcher:topOrder="4" /> <app launcher:topPackageName="com.yahoo.mobile.client.android.im" launcher:topClassName="com.yahoo.mobile.client.android.im.YahooMessenger" launcher:topOrder="5" />类似文件中的写法,填写你的应用的包名和class name,以及希望它显示的顺序(最小为0)
分析:下面来简单分析在代码中是如何实现的。
AllAppsList.java类中有个静态类TopPackage,非常简单的类,只有三个成员变量和一个构造方法,用来存储default_toppackage.xml文件中配置的一项:
static class TopPackage { public TopPackage(String pkgName, String clsName, int index) { packageName = pkgName; className = clsName; order = index; } String packageName; String className; int order;}
AllAppsList.java类中有个静态变量sTopPackages,用来存储所有在default_toppackage.xml文件中的配置:
static ArrayList<TopPackage> sTopPackages = null;
有个静态方法负责解析这个xml文件,并把信息保存到sTopPackages中:
static boolean loadTopPackage(final Context context)
在LauncherModel.java的startLoader方法中调用AllAppsList.loadTopPackage(mApp)来解析xml文件。
解析后的使用是在
public void reorderApps() { if (LauncherLog.DEBUG) { LauncherLog.d(TAG, "reorderApps: mApps = " + mApps + ", this = " + this); } if (AllAppsList.sTopPackages == null || mApps == null || mApps.isEmpty() || AllAppsList.sTopPackages.isEmpty()) { return; } ArrayList<ApplicationInfo> dataReorder = new ArrayList<ApplicationInfo>( AllAppsList.DEFAULT_APPLICATIONS_NUMBER); for (AllAppsList.TopPackage tp : AllAppsList.sTopPackages) { for (ApplicationInfo ai : mApps) { if (ai.componentName.getPackageName().equals(tp.packageName) && ai.componentName.getClassName().equals(tp.className)) { mApps.remove(ai); dataReorder.add(ai); break; } } } for (AllAppsList.TopPackage tp : AllAppsList.sTopPackages) { int newIndex = 0; for (ApplicationInfo ai : dataReorder) { if (ai.componentName.getPackageName().equals(tp.packageName) && ai.componentName.getClassName().equals(tp.className)) { newIndex = Math.min(Math.max(tp.order, 0), mApps.size()); mApps.add(newIndex, ai); break; } } }}
在AppsCustomizePagedView.java的setApps、addApps、removeApps和updateApps方法中都会调用reorderApps来重新修改mApps中存储的各应用的顺序,当然,应该是在正常的排序结束后才根据你的配置重新再排序:
private ArrayList<ApplicationInfo> mApps;
private ArrayList<ApplicationInfo> mApps;Collections.sort(mApps, LauncherModel.getAppNameComparator());reorderApps();
0 0
- 如何定制Launcher主菜单中应用程序的显示顺序
- android 如何定制Launcher主菜单中应用程序图标在主菜单中的显示顺序
- android 如何定制Launcher主菜单中应用程序图标在主菜单中的显示顺序
- 如何定制Launcher主菜单中应用程序图标的显示顺序?
- android 如何定制Google launcher的主菜单图标
- android如何定制Google launcher的主菜单图标
- android 如何让应用程序在主菜单[launcher]程序列表中动态显示或隐藏
- 如何客制化Launcher的主菜单图标?
- 如何让主菜单的背景显示为壁纸
- android 如何让主菜单的背景显示为壁纸
- FAQ06210]如何让主菜单的背景显示为壁纸?
- android launcher主菜单显示图片和文字之BubbleTextView
- 在Launcher隐藏主菜单中某个应用
- 如何调整主菜单顺序及增加删除主菜单条目
- redmine 主菜单显示
- linux 中管理主菜单的程序...
- 如何隐藏主菜单下一个apk的图标,不让其显示?
- Android 如何将定制的Launcher成为系统中唯一的Launcher
- IOS自定义View
- unity3d制作2d游戏的原理
- java中的面向对象的三大基本特征
- 麻省理工开发码农至宝:智能化编程语言
- Configure,Makefile.am, Makefile.in, Makefile文件之间关系(转)
- 如何定制Launcher主菜单中应用程序的显示顺序
- MFC显示背景图片
- 关于解决linux下修改数据库编码的问题
- C语言之静态链接库与动态链接库(1)
- ios从系统相册中读取图片
- 要点Java7 条件语句
- iOS高级进阶(2):初学Core Image技术
- templatemonster 模版保护
- MyEclipse编码方式的设置