Android:可绘制图标不可见

Android:可绘制图标不可见,android,android-studio,android-drawable,Android,Android Studio,Android Drawable,我正在尝试获取设备上安装的应用程序列表,并在RecyclerView中显示它们的图标 以下代码用于获取应用程序: Intent intent = new Intent(Intent.ACTION_MAIN, null).addCategory(Intent.CATEGORY_LAUNCHER); List<ResolveInfo> installedApps= packageManager.queryIntentActivities(intent, 0); inst

我正在尝试获取设备上安装的应用程序列表,并在RecyclerView中显示它们的图标

以下代码用于获取应用程序:

Intent intent = new Intent(Intent.ACTION_MAIN, null).addCategory(Intent.CATEGORY_LAUNCHER);
List<ResolveInfo> installedApps= packageManager.queryIntentActivities(intent, 0);

        installedApps.forEach(p-> {
            String appName = p.loadLabel(packageManager).toString();
            String appPackageName = p.activityInfo.packageName;
            Drawable icon = p.loadIcon(packageManager);
            ApplicationInfo info = p.activityInfo.applicationInfo;

            App_Object appObject = new App_Object(appName, appPackageName, icon, info);
            if(!List_AllApps.contains(appObject)) {
                List_AllApps.add(appObject);
            }
        });
        
List_AllApps.sort(Comparator.comparing(o -> o.app_name));
Intent-Intent=新的Intent(Intent.ACTION\u MAIN,null).addCategory(Intent.CATEGORY\u启动器);
列出installedApps=packageManager.QueryInputActivities(intent,0);
已安装的Apps.forEach(p->{
字符串appName=p.loadLabel(packageManager).toString();
字符串appPackageName=p.activityInfo.packageName;
可绘制图标=p.loadIcon(packageManager);
ApplicationInfo=p.activityInfo.ApplicationInfo;
App_Object appObject=新的App_对象(appName、appPackageName、icon、info);
如果(!List_AllApps.contains(appObject)){
添加所有应用程序的列表(appObject);
}
});
List_AllApps.sort(Comparator.comparing(o->o.app_name));
这里的问题是,某些可绘图项是不可见的,无法显示,即使它们不是空的

我发现上述Drawables确实有一个icon.getIntrinsicHeight()和一个icon.getIntrinsicWidth()为0,这导致它们不可见

我已经尝试将可绘制图形转换为ShapeDrawable,因为您可以在其中使用setIntrinsicWidth()和setIntrinsicHeight(),但没有成功。 我还尝试设置未显示的可绘制图形的边界,并尝试将其转换为BitmapDrawables,但没有任何结果

这里奇怪的是,有时图标显示时没有对代码做任何更改,因此我真的很困惑我还可以尝试解决什么问题(getIntrinsicWidth()和getIntrinsicHeight()然后大于0并具有所需的值)

如何解决此问题?我可以以任何其他方式调整它们的大小以便显示它们吗

下面是在Recyclerview中为Imageview设置可绘制视图时的外观图片:


非常感谢您的帮助

要显示设备上安装的应用程序列表,您可以使用package manager的GET_META_数据

public void getInstalledApplication(){
PackageManager pm=getPackageManager();
Listpackages=pm.getinstalledApplication(PackageManager.GET_元数据);
//您拥有设备中的所有软件包列表。
对于(ApplicationInfo packageInfo:packages){
//检查应用程序是否已更新
如果((packageInfo.flags和ApplicationInfo.FLAG\u更新的\u系统\u应用程序)!=0){
addToInstalledApps(packageInfo,pm);
}如果((packageInfo.flags&ApplicationInfo.FLAG_SYSTEM)!=0){//此应用程序安装在设备系统的映像中
}否则{
addToInstalledApps(packageInfo,pm);
}
}

}
您正面临这个问题,因为它的大小为0。 请尝试使用此代码。这可能有助于增加尺寸

private void checkAllPackageData(){
PackageManager PackageManager=getActivity().getPackageManager();
Intent Intent=新Intent(Intent.ACTION\u MAIN,null).addCategory(Intent.CATEGORY\u启动器);
列出installedApps=packageManager.QueryInputActivities(intent,0);
对于(ResolveInfo p:installedApps){
字符串appName=p.loadLabel(packageManager).toString();
字符串appPackageName=p.activityInfo.packageName;
可绘制图标=p.loadIcon(packageManager);
ApplicationInfo=p.activityInfo.ApplicationInfo;
试一试{
位图位图=((BitmapDrawable)图标).getBitmap();
System.out.println(“Before”+bitmap.getHeight());
位图bitmap1=Bitmap.copy(Bitmap.Config.ARGB_8888,true);
位图bitmap2=getResizedBitmap(bitmap1,35,35);
System.out.println(bitmap2.getHeight());
}捕获(例外e){
e、 printStackTrace();
}
}
}
公共位图getResizedBitmap(位图bm、int-newWidth、int-newHeight){
int width=bm.getWidth();
int height=bm.getHeight();
浮动比例宽度=((浮动)新宽度)/宽度;
浮动刻度高度=((浮动)新高度)/高度;
//为操纵创建一个矩阵
矩阵=新矩阵();
//调整位图的大小
矩阵。后标度(标度宽度、标度高度);
//“重新创建”新位图
Bitmap resizedBitmap=位图.createBitmap(
bm,0,0,宽度,高度,矩阵,假);
bm.recycle();
返回resizedBitmap;

}
Hi Shubham,首先感谢您的回答!不幸的是,这并不是我所面临问题的解决方案。我确实通过代码获得了所需的信息,但问题在于绘图本身。我还尝试了你的代码,不幸的是,它产生了相同的结果。正如你所说的drawable不是空的。这可能是尺寸问题。请检查[。希望有帮助。尝试了您的解决方案,但仍然不起作用,当我从位图创建新的位图绘制时,它只是创建了一个黑色正方形作为图标。无论如何,感谢您的时间!