Android12 桌面抽屉里面应用只显示需要显示的应用图标并自定义排列

PS:标题所说的桌面抽屉就是在桌面往上滑出现有所有应用图标的地方

1-1、抽屉里面应用图标的显示加载在packages/apps/Launcher3/src/com/android/launcher3/allapps/AlphabeticalAppsList.java里面进行加载,具体的实现方法是onAppsUpdated()

1-2、根据方法里的代码了解到,最后刷新展示的调用的是updateAdapterItems(),它又拿的是List<AppInfo> mApps里的东西来直接展示的,也就是说mApps里面哪个软件在前面,展示出来那个软件就在前面,所以我们先建立一个数组来存放需要展示的软件。

/**
    *	在系统列表中取得需要排序的APP组成一个列表
    */
    private List<AppInfo> getSortArrayApps(){
	//需要排序的APP的包名和启动类
	 String[] appPackageAndClassName = new String[]{
        //联系人,时钟,文档,音乐
			"com.android.contacts/com.android.contacts.activities.PeopleActivity",
			"com.android.deskclock/com.android.deskclock.DeskClock",
			"com.android.documentsui/com.android.documentsui.LauncherActivity",
            "com.android.music/com.android.music.MusicBrowserActivity"
		};
	 String packageName = null;
	 String className = null;
	 List<AppInfo> sortAppsArray = new ArrayList<>();

	 for(int i=0; i<appPackageAndClassName.length; i++){		
			packageName = appPackageAndClassName[i].split("/")[0];
			className = appPackageAndClassName[i].split("/")[1];
			for(int j=0; j<mApps.size(); j++){
				if(mApps.get(j).componentName.getPackageName().equals(packageName)
					&& mApps.get(j).componentName.getClassName().equals(className)){	
					sortAppsArray.add(mApps.get(j));
					break;
				}
			}
		}
		return sortAppsArray;
	}

1-3、上述这种软件包名“com.android.contacts/com.android.contacts.activities.PeopleActivity"需要自己打个log查看,如果知道就不用,具体是在public void onAppsUpdated()下。

1-4、拿到包名后就可以按照1-2的方法填充数组,之后就需要吧填充的数据放入 mApps内。

/**
    *	将需要排序的和不需排序的列表传入,当排序列表放在前面
    */
    private void setAndSortNewAllApps(){
	//  List<AppInfo> newAppsArray = new ArrayList<>();
	 List<AppInfo> arrayApps = getSortArrayApps();
	//  List<AppInfo> notArrayApps = getOutArrayApps();
		
	//  if(arrayApps.size()>0 && notArrayApps.size()>0){
	// 		//对集合2进行排序
	// 		Collections.sort(notArrayApps, mAppNameComparator);
	// 		if(false){
	// 			//合并集合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);
	// 	}

        mApps.clear();
        mApps.addAll(arrayApps);

	}

1-5、之后需要把onAppsUpdated()方法内这几行注释掉,因为这里重新排序填充了mApps,但是我们不需要,所以要注释掉。

1-6、最后在 onAppsUpdated()方法内添加1-4的方法并把Collections注释就行了,最后就会在桌面抽屉里展示联系人,时钟,文档,音乐这几个软件图标。

1-7,如果想所有软件都展示,只是想对个别软件进行排序,出来1-2的方法,还需要添加以下方法。

/**
    *	在系统列表中取得不需要排序的APP组成一个列表
    */
    private List<AppInfo> getOutArrayApps(){
		List<AppInfo> outAppsArray = new ArrayList<>(mApps);
		//从mApps中移除需要排序的应用
		outAppsArray.removeAll(getSortArrayApps());
		return outAppsArray;
	}

 1-8、修改1-4的方法

/**
    *	将需要排序的和不需排序的列表传入,当排序列表放在前面
    */
    private void setAndSortNewAllApps(){
	 List<AppInfo> newAppsArray = new ArrayList<>();
	 List<AppInfo> arrayApps = getSortArrayApps();
	 List<AppInfo> notArrayApps = getOutArrayApps();
		
	 if(arrayApps.size()>0 && notArrayApps.size()>0){
			//对集合2进行排序
			Collections.sort(notArrayApps, mAppNameComparator);
			if(false){
				//合并集合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);
		}

        // mApps.clear();
        // mApps.addAll(newAppsArray);

	}

1-9、最后1-5和1-6保持不变,这些地方还是需要注释掉,最后展示出来就会出现联系人,时钟,文档,音乐这几个软件在最前面,后面是其他软件。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值