【问题标题】:Android - How to get an icon of an app?Android - 如何获取应用程序的图标?
【发布时间】:2011-08-02 12:06:36
【问题描述】:

我正在尝试以这种方式显示任务列表 -

图标 |应用名称 |复选框

因为我发现没有 listview 适配器支持这一点,所以我决定开发一个自定义适配器,但我无法获取应用程序的图标。到目前为止,我尝试过这个:-

public View getView(int position, View convertView, ViewGroup parent)
{
    View v = convertView;
    View row = inflater.inflate(R.layout.item, parent, false);
    CheckedTextView ctb = (CheckedTextView)row.findViewById(R.id.checkText);
    String pkgName = "com.abc.abc";

    ctb.setText("bla bla");
    ImageView iv = (ImageView)row.findViewById(R.id.image);
    List<PackageInfo> pkgs = activity.getPackageManager().getInstalledPackages(0);
    for(PackageInfo p : pkgs)
    {
       if(p.packageName.equals(pkgName))
       {
          Drawable d =  p.applicationInfo.loadIcon(pm);
           iv.setImageDrawable(d);
       }
    }

     return row;
}
}

我确信我在这段代码中尝试了一些愚蠢的事情。请尝试抓住我做错的任何事情。

谢谢。

【问题讨论】:

    标签: android listview checkbox icons adapter


    【解决方案1】:

    您可以通过以下方式获取应用(包)的图标:

    String pkg = "com.app.my";
    Drawable icon = getContext().getPackageManager().getApplicationIcon(pkg);
    

    【讨论】:

    • 哈哈。队友的欢呼声。请再帮我一点,因为我又被卡住了:P 我的自定义适配器也有复选框,我只是在我的自定义适配器的 XML 中定义了它,并在我的自定义适配器类中注意到它。但问题是如何知道在我实际使用此自定义适配器的程序中选中或未选中复选框。我需要用一些代码绑定它吗?我以前使用过 simple_list_item_multiple_choice,我想要同样的工作。可能吗?如果您知道该怎么做,请提供帮助,否则我非常感谢您的努力。谢谢:)
    • @Varundroid:我实际上没有这方面的经验,但我必须在我的自定义列表项中放置一个按钮。我最终创建了一个自定义视图,在其构造函数中从 xml 膨胀,并添加了访问按钮的便捷方法(如 MyView.getButton() 方法)。
    • 不用担心,仍然感谢您告诉我这个按钮的东西可能在将来我可能需要在某个地方使用它。 :)
    【解决方案2】:

    请查看我的获取应用程序图标列表的解决方案

    在此获取所有应用程序的ResolveInfo 列表。

    resolveInfo 类包含从针对 IntentFilter 解析意图返回的信息。这部分对应于从 AndroidManifest.xml 的标签中收集的信息

    这是在android中获取应用程序图标列表的方法,希望这个例子对你有所帮助

        import java.util.List;
    
    
    import android.app.ListActivity;
    import android.content.Context;
    import android.content.Intent;
    import android.content.pm.ResolveInfo;
    import android.os.Bundle;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.BaseAdapter;
    
    import android.widget.ImageView;
    import android.widget.ListView;
    import android.widget.TextView;
    
    public class IconListActivity extends ListActivity {
    
    
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
    
            loadApps();  
    
        }
    
    
    
        private void loadApps() {
            Intent mainIntent = new Intent(Intent.ACTION_MAIN, null);
            mainIntent.addCategory(Intent.CATEGORY_LAUNCHER);
    
            List<ResolveInfo> mApps = getPackageManager().queryIntentActivities(mainIntent, 0);
    
            ListView listView = getListView();
            listView.setAdapter(new AppsAdapter(this,mApps));
         }
    
        public class AppsAdapter extends BaseAdapter {
            private LayoutInflater inflater;
            private List<ResolveInfo> mApps;
    
            public AppsAdapter(Context context, List<ResolveInfo> mApps) {
                this.inflater = LayoutInflater.from(context);
                this.mApps = mApps;
            }
    
            public View getView(int position, View convertView, ViewGroup parent) {
    
                ViewHendler hendler;
                if (convertView == null) {
                    convertView = inflater.inflate(R.layout.row_view, null);
                    hendler = new ViewHendler();
                    hendler.textLable = (TextView)convertView.findViewById(R.id.textViewLable);
                    hendler.iconImage = (ImageView)convertView.findViewById(R.id.imageViewIcon);
                    convertView.setTag(hendler);
                } else {
                    hendler = (ViewHendler)convertView.getTag();
                }
                ResolveInfo info = this.mApps.get(position);
                hendler.iconImage.setImageDrawable(info.loadIcon(getPackageManager()));
                hendler.textLable.setText(info.loadLabel(getPackageManager()));
    
                return convertView;
    
            }
            class ViewHendler{
                TextView textLable;
                ImageView iconImage;
            }
    
    
            public final int getCount() {
                return mApps.size();
            }
    
            public final Object getItem(int position) {
                return mApps.get(position);
            }
    
            public final long getItemId(int position) {
                return position;
            }
        }
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-09
      相关资源
      最近更新 更多