Android8.1,Launcher3中应用显示顺序

有些客户要求Luncher中的应用显示按照指定的顺序,实现如下:

先将需要排序的应用包名和类名存放在字符串数组:


	 
	 com.android.calculator2/com.android.calculator2.CalculatorSprd
	 
	 com.android.dialer/com.android.dialer.app.DialtactsActivity
	 
	 com.android.soundrecorder/com.sprd.soundrecorder.RecorderActivity
	 
	 com.google.android.calendar/com.android.calendar.AllInOneActivity
	 
	 com.android.settings/com.android.settings.Settings
	 
	 com.android.deskclock/com.android.deskclock.DeskClock
	 
	 com.android.contacts/com.android.contacts.activities.PeopleActivity
	 
	 com.android.gallery3d/com.android.gallery3d.app.GalleryActivity
	 
	 com.android.documentsui/com.android.documentsui.LauncherActivity
	 
	 com.android.camera2/com.android.camera.CameraLauncher
	 
	 com.google.android.apps.messaging/com.google.android.apps.messaging.ui.ConversationListActivity
	 
	 com.android.music/com.android.music.MusicBrowserActivity

将数组中存放的应用对应的AppInfo对象存放到List集合中:

private List getInArrayApps(){
		
	 String[] appPackageAndClassName = mLauncher.getResources().getStringArray(R.array.app_package_and_class_name);
	 String packageName = null;
	 String className = null;
	 List appsInArray = new ArrayList<>();
	 
	 //遍历字符串数组,并与集合mApps中的应用匹配,匹配成功就add到集合appsInArray中
	 for(int i=0; i

将集合mApps中需要排序的应用remove掉,把剩下的不需要排序的应用存放在集合appsOutArray中:

private List getOutArrayApps(){

	 List appsOutArray = new ArrayList<>(mApps);
	 //从mApps中移除需要排序的应用
	 appsOutArray.removeAll(getInArrayApps());

	 return appsOutArray;
}

实现一个功能:将getInArrayApps()函数返回的应用集合(后面称为集合1,排序方式为字符串数组中的顺序)和getOutArrayApps()函数返回的应用集合(后面成为集合2,排序方式为系统默认排序方式,字母排序)一起存放入mApps中,存放前先将mApps清空。既可以将集合1放在前面,也可以将集合1放在后面。

private void setAndSortNewAllApps(List apps01, List apps02){
	 List newAppsArray = new ArrayList<>();
	 List arrayApps = apps01;
	 List notArrayApps = apps02;
		
	 if(arrayApps.size()>0 && notArrayApps.size()>0){
		//对集合2进行排序
		Collections.sort(notArrayApps, mAppNameComparator);

		if(mLauncher.getResources().getBoolean(R.bool.hyst_config_array_apps_on_the_back)){
			//合并集合1和2,并将集合1放在后面
			notArrayApps.addAll(arrayApps);
			newAppsArray = notArrayApps;
		}else{
			//合并集合1和2,并将集合1放在前面
			arrayApps.addAll(notArrayApps);
			newAppsArray = arrayApps;
		}
		//将集合mApps清空				
		mApps.clear();
		//将集合1和集合2合并后放入mApps集合
		mApps.addAll(newAppsArray);
	 }
}

最后用setAndSortNewAllApps函数替换Launcher3中应用排序的代码, 代码在AlphabeticalAppsList.java类中。

代码路径:packages/apps/Launcher3/src/com/android/launcher3/allapps/AlphabeticalAppsList.java

在这个类中找到函数onAppsUpdated(),函数中有行代码如下:

Collections.sort(mApps, mAppNameComparator);

修改如下:

private void onAppsUpdated() {

	 ...........
	 ...........
	 //省略
	 ...........
	 ...........
	 
	 if(mLauncher.getResources().getBoolean(R.bool.hyst_config_some_apps_sort)){
		setAndSortNewAllApps(getInArrayApps(), getOutArrayApps());
	 }else {
		Collections.sort(mApps, mAppNameComparator);
	 }

	 ...........
	 ...........
	 //省略
	 ...........
	 ...........

}
ok!!

你可能感兴趣的:(Android学习)