Android引入布局 GridView实现ImageView+TextView

来源:互联网 发布:apache安装包下载地址 编辑:程序博客网 时间:2024/05/17 15:03

GridView实现ImageView+TextView

关键思路:自定义Adapter继承BaseAdapter。重写getView方法。

  • 在activity_main.xml中写一个GridView
 <GridView      android:id="@+id/gv_item"      android:layout_width="match_parent"      android:layout_height="match_parent"      android:numColumns="auto_fit"      android:columnWidth="96dp"      android:verticalSpacing="12dp"      android:horizontalSpacing="12dp"      android:stretchMode="columnWidth"      android:gravity="center"></GridView>
  • 在layout中写一个grid_item.xml,显示ImageView+TextView
<?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/iv_icon"        android:layout_gravity="center"        android:layout_width="90dp"        android:layout_height="90dp" />    <TextView        android:id="@+id/tv_title"        android:layout_gravity="center"        android:gravity="center"        android:singleLine="true"        android:layout_width="90dp"        android:layout_height="wrap_content" /></LinearLayout>
  • 写一个javabean来表示要显示的数据GridInfo.c
public class GridInfo {    private Drawable appIcon;    private String title;    private String packageName;    public GridInfo(Drawable appIcon,String title,String packageName) {        this.appIcon = appIcon;        this.title = title;        this.packageName = packageName;    }    public Drawable getAppIcon() {        return appIcon;    }    public String getTitle() {        return title;    }    public String getPackageName() {        return packageName;    }}
  • 自定义Adapter继承BaseAdapter
public class GridItemAdapter extends BaseAdapter{    private List<GridInfo> mGridInfoList;    //定义数据类    private LayoutInflater mInflater;       //定义Inflater    public GridItemAdapter(Context context, List<GridInfo> gridInfoList){        mGridInfoList = gridInfoList;        mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);    }    public int getCount() {        return mGridInfoList.size();    }    public Object getItem(int position) {        return mGridInfoList.get(position);    }    public long getItemId(int position) {        return position;    }    public View getView(int position, View convertView, ViewGroup parent) {        ViewHolder viewHolder = new ViewHolder();        if(convertView==null){            convertView = mInflater.inflate(R.layout.grid_item,null);            viewHolder.iv = (ImageView) convertView.findViewById(R.id.iv_icon);            viewHolder.tv = (TextView) convertView.findViewById(R.id.tv_title);            convertView.setTag(viewHolder);        }else{            viewHolder = (ViewHolder) convertView.getTag();        }        //设置holder        GridInfo mGridInfo =  mGridInfoList.get(position);        viewHolder.iv.setImageDrawable(mGridInfo.getAppIcon());        viewHolder.tv.setText(mGridInfo.getTitle());        return convertView;    }    private class ViewHolder{        ImageView iv;        TextView tv;    }}
  • MainActivity显示数据
public class MainActivity extends AppCompatActivity {    GridView mGridView;    GridInfo mGridInfo;    List<GridInfo> mGridInfoList;    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        ActionBar actionBar = getSupportActionBar();        actionBar.hide();        setContentView(R.layout.activity_main);        init();        initView();    }    //初始化数据    private void init() {        Intent mainInent = new Intent(Intent.ACTION_MAIN,null);        mainInent.addCategory(Intent.CATEGORY_LAUNCHER);        List<ResolveInfo> resolveInfos = getPackageManager().queryIntentActivities(mainInent, 0);        mGridInfoList = new ArrayList();        for(ResolveInfo resolveInfo:resolveInfos){            Drawable icon = resolveInfo.activityInfo.loadIcon(getPackageManager());            String title = resolveInfo.activityInfo.loadLabel(getPackageManager()).toString();            String packageName = resolveInfo.activityInfo.packageName;            mGridInfo = new GridInfo(icon, title, packageName);            mGridInfoList.add(mGridInfo);        }    }    //显示数据    private void initView() {        mGridView = (GridView) findViewById(R.id.gv_item);        GridItemAdapter mAdapter = new GridItemAdapter(this,mGridInfoList);        mGridView.setAdapter(mAdapter);    }}
  • 显示效果如下
1 0
原创粉丝点击