用GridView展示已经安装的应用

来源:互联网 发布:香港专业教育学院 知乎 编辑:程序博客网 时间:2024/05/17 07:55

activity_example2.xml

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="vertical">    <GridView        android:id="@+id/gridview"        android:layout_width="match_parent"        android:layout_height="match_parent"        android:columnWidth="90dp"        android:gravity="center"        android:horizontalSpacing="10dp"        android:numColumns="3"        android:stretchMode="columnWidth"        android:verticalSpacing="10dp">    </GridView></LinearLayout>

item 组件——item_gridview2.xml

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="vertical">    <ImageView        android:id="@+id/img_appIcon"        android:layout_width="50dp"        android:layout_height="50dp"        android:scaleType="centerCrop" />    <TextView        android:id="@+id/tv_appName"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_marginTop="5dp"        android:text="测试" /></LinearLayout>

实体类AppInfo.java

package com.studio.gridviewproj.model;import android.graphics.drawable.Drawable;public class AppInfo {    /**     * 应用名称     */    private String appName;    /**     * 应用包名     */    private String packageName;    /**     * 版本名称     */    private String versionName;    /**     * 版本号     */    private int versionCode;    /**     * 应用图标     */    private Drawable appIcon;    public String getAppName() {        return appName;    }    public void setAppName(String appName) {        this.appName = appName;    }    public String getPackageName() {        return packageName;    }    public void setPackageName(String packageName) {        this.packageName = packageName;    }    public String getVersionName() {        return versionName;    }    public void setVersionName(String versionName) {        this.versionName = versionName;    }    public int getVersionCode() {        return versionCode;    }    public void setVersionCode(int versionCode) {        this.versionCode = versionCode;    }    public Drawable getAppIcon() {        return appIcon;    }    public void setAppIcon(Drawable appIcon) {        this.appIcon = appIcon;    }}

ExampleActivity2.java

package com.studio.gridviewproj;import android.content.pm.ApplicationInfo;import android.content.pm.PackageInfo;import android.content.pm.PackageManager;import android.os.Bundle;import android.support.design.widget.FloatingActionButton;import android.support.design.widget.Snackbar;import android.support.v7.app.AppCompatActivity;import android.support.v7.widget.Toolbar;import android.view.View;import android.widget.GridView;import com.studio.gridviewproj.adapter.GridAdapter2;import com.studio.gridviewproj.model.AppInfo;import java.util.ArrayList;import java.util.List;public class ExampleActivity2 extends AppCompatActivity {    private GridView gridView;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_example2);        gridView = (GridView) findViewById(R.id.gridview);        GridAdapter2 gridAdapter2 = new GridAdapter2(this, getAppList());        gridView.setAdapter(gridAdapter2);    }    public List<AppInfo> getAppList() {        List<AppInfo> appInfoList = new ArrayList<>();        //包管理器        PackageManager packageManager = getPackageManager();        //获取已经安装的包的集合        List<PackageInfo> installedPackages = packageManager.getInstalledPackages(0);        for (int i = 0; i < installedPackages.size(); i++) {            PackageInfo packageInfo = installedPackages.get(i);            AppInfo appInfo = new AppInfo();            appInfo.setAppName(packageInfo.applicationInfo.loadLabel(packageManager).toString());            appInfo.setAppIcon(packageInfo.applicationInfo.loadIcon(packageManager));            appInfo.setPackageName(packageInfo.packageName);            appInfo.setVersionCode(packageInfo.versionCode);            appInfo.setVersionName(packageInfo.versionName);            //过滤掉系统应用            if ((packageInfo.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) == 0) {                appInfoList.add(appInfo);            }        }        return appInfoList;    }}

适配器GridAdapter2.java

package com.studio.gridviewproj.adapter;import android.content.Context;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.ImageView;import android.widget.TextView;import com.studio.gridviewproj.R;import com.studio.gridviewproj.model.AppInfo;import java.util.List;public class GridAdapter2 extends BaseAdapter {    private Context context;    private List<AppInfo> appInfoList;    public GridAdapter2(Context context, List<AppInfo> appInfoList) {        this.appInfoList = appInfoList;        this.context = context;    }    @Override    public int getCount() {        return appInfoList.size();    }    @Override    public Object getItem(int i) {        return null;    }    @Override    public long getItemId(int i) {        return 0;    }    @Override    public View getView(int i, View view, ViewGroup viewGroup) {        ViewHolder holder;        if (view == null) {            view = View.inflate(context, R.layout.item_gridview2, null);            holder = new ViewHolder();            holder.img_appIcon = view.findViewById(R.id.img_appIcon);            holder.tv_appName = view.findViewById(R.id.tv_appName);            view.setTag(holder);        } else {            holder = (ViewHolder) view.getTag();        }        AppInfo appInfo = appInfoList.get(i);        holder.img_appIcon.setImageDrawable(appInfo.getAppIcon());        holder.tv_appName.setText(appInfo.getAppName() + " " + appInfo.getVersionName());        return view;    }    public class ViewHolder {        ImageView img_appIcon;        TextView tv_appName;    }}

这里写图片描述

原创粉丝点击