Android开发笔记(十)——GridView网格视图

还是和上节课一样,先新建一个package gridview ,然后在该package下新建java class GridViewActivity ,继承自 AppCompatActivityAppCompatActivityActivity 的衍生。

之后新建一个layout文件 activity_grid_view.xml ,在 GridViewActivity.java 中补全代码:

注意这里要在 AndroidMainfest.xml 文件中手动声明:

 <activity android:name=".gridview.GridViewActivity"></activity>

MainActivity.java 中添加一个Button组件用来跳转到GridView的展示界面,然后在 MainActivity.java 中添加该按钮的声明。之后就可以在布局文件 activity_grid_view.xml 中进行布局啦。

常用属性

Android:numColumns="auto_fit"   //GridView的列数设置为自动
android:verticalSpacing=”10dp”          //两行之间的边距
android:horizontalSpacing=”10dp”      //两列之间的边距 

在布局文件 activity_grid_view.xml 中的布局如下:

可以看到网络视图的初始样子。

接下来在layout文件下再新建一个layout resource filer用来设计网格想要展示的内容:

进行布局,大体布局如下:

Adapter接口

在gridview包下面新建一个class继承自 BaseAdapter 重写里面的方法:

package com.example.myapplication.gridview;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;

import com.bumptech.glide.Glide;
import com.example.myapplication.R;

public class MyGridViewAdapter extends BaseAdapter {

    private Context mContext;
    private LayoutInflater mLayoutInflater;

    public MyGridViewAdapter(Context context){
        this.mContext=context;
        mLayoutInflater=LayoutInflater.from(context);
    }

    @Override
    public int getCount() {
        return 12;
    }

    @Override
    public Object getItem(int position) {
        return null;
    }

    @Override
    public long getItemId(int position) {
        return 0;
    }
    static class ViewHolder{
        public ImageView imageView;
        public TextView textView;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder holder=null;
        if(convertView==null){
            convertView=mLayoutInflater.inflate(R.layout.layout_grid_item,null);
            holder=new ViewHolder();
            holder.imageView=convertView.findViewById(R.id.iv_grid);
            holder.textView=convertView.findViewById(R.id.tv_title);
            convertView.setTag(holder);
        }else {
            holder= (ViewHolder) convertView.getTag();
        }
        //给控件赋值
        holder.textView.setText("唐老鸭");
        Glide.with(mContext).load("https://img.newyx.net/upload/gallery/20130911/13858232928.JPG").into(holder.imageView);

        return convertView;
    }
}

这里主要重写了 getView 函数,用来显示每一个网格的样式。
GridViewActivity.java 中进行对GridView控件的声明:

当前的效果:

点击事件和长按事件

GridViewActivity.java 中添加一个事件如下:

return false 是指,执行长按事件之后,该事件并不会就此停止,点击事件同样也会被触发, return true 的话执行完长按事件之后就会直接停止,

效果如下:

这个和ListView的用法基本一致!

posted @ 2020-07-18 10:38  Ylxxxxx  阅读(315)  评论(0编辑  收藏  举报