GridView & 自定义适配器

来源:互联网 发布:mysql并发insert死锁 编辑:程序博客网 时间:2024/05/29 17:40

2017/1/5 星期四 17:23:26
[toc]

GridView & 自定义适配器

作用:用于展示图片,可以用作图库。
效果:可以滑动,类似ScrollView
有点击事件
需要适配器

常见属性

√ android:numColumns="auto_fit"         列数设为自动  √ android:columnWidth="90dp"            列宽√ android:stretchMode="columnWidth"     缩放模式与列宽大小同步  √ android:verticalSpacing="10dp"        行距  √ android:horizontalSpacing=”10dp”      列距  android:cacheColorHint="#00000000"      去除拖动时默认的黑色背景  android:listSelector="#00000000"        去除选中时的黄色底色  android:scrollbars="none"               隐藏GridView的滚动条  android:fadeScrollbars="true"           设置为true就可以实现滚动条的自动隐藏和显示  android:fastScrollEnabled="true"        GridView出现快速滚动的按钮(至少滚动4页才会显示)  android:fadingEdge="none"               GridView衰落(褪去)边缘颜色为空,缺省值是vertical。(可以理解为上下边缘的提示色)  android:fadingEdgeLength="10dip"        定义的衰落(褪去)边缘的长度  android:stackFromBottom="true"          设置为true时,你做好的列表就会显示你列表的最下面  android:transcriptMode="alwaysScroll"   当你动态添加数据时,列表将自动往下滚动最新的条目可以自动滚动到可视范围内  android:drawSelectorOnTop="false"       点击某条记录不放,颜色会在记录的后面成为背景色,内容的文字可见(缺省为false)  

自定义适配器

1. 创建MyAdapter继承于BaseAdapter

2. 实现4个方法

  • getCount() 获取要显示的选项总数,一般为数组的长度
  • getItem(int position) 每一个选项,为数组的元素
  • getItemId(int position) 数组的ID,即position
  • getView(int position, View convertView, ViewGroup parent) //主要在该方法中操作。
    getView()
    (1)在GridView中只展示图片
    在此创建ImageView,ImageView imageView = new ImageView(context);
    将图片设置到ImageView中,返回的是ImageView对象(此处
    需要上下文,但是不能用this,用以下方式构建context
private Context context;public MyAdapter(Context context) {    this.context = context;}


(2)在GridView中展示图文(即自定义项目视图)
a. 创建自定义视图的item.xml
b. 在getView方法中,

//将item.xml加载LayoutInflater inflater = LayoutInflater.from(context);View view = inflater.inflate(R.layout.item, null);//找到item.xml中的组件ImageView imageView = (ImageView) view.findViewById(R.id.iv);TextView textView = (TextView) view.findViewById(R.id.tv);//给找到的组件设置内容imageView.setImageResource(images[position]);textView.setText(imageNames[position]);

示例代码

MainActivity2.java

public class MainActivity2 extends AppCompatActivity {    GridView gridView;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main2);        gridView = (GridView) findViewById(R.id.gv2);        gridView.setAdapter(new MyAdapter(this));//        gridView.setOnItemClickListener();        //设置点击事件//        gridView.setOnItemLongClickListener();    //设置长按点击事件    }    //设置适配器    //static静态类相当于外部类,优先选择使用静态内部类    static class MyAdapter extends BaseAdapter {        private Context context;        public MyAdapter(Context context) {            this.context = context;        }   //当需要上下文而不能用this指定的时候,用该步骤构建context        int[] images = {R.mipmap.a, R.mipmap.b, R.mipmap.c, R.mipmap.d, R.mipmap.e, R.mipmap.z1, R.mipmap.z2, R.mipmap.butterfly, R.mipmap.file};        String[] imageNames = {"a", "b", "c", "d", "e", "z1", "z2", "butterfly", "file"};        @Override        public int getCount() { //数组元素数目,即数组长度            return imageNames.length;//images.length都行,都是9        }        @Override        public Object getItem(int position) {   //数组元素            return images[position];    //用imageNames[position]也可        }        @Override        public long getItemId(int position) {            return position;    //此处不变        }        @Override        public View getView(int position, View convertView, ViewGroup parent) { //此处需要创建一个布局文件            //将item.xml加载            LayoutInflater inflater = LayoutInflater.from(context);            View view = inflater.inflate(R.layout.item, null);            //找到item.xml中的组件            ImageView imageView = (ImageView) view.findViewById(R.id.iv);            TextView textView = (TextView) view.findViewById(R.id.tv);            //给找到的组件设置内容            imageView.setImageResource(images[position]);            textView.setText(imageNames[position]);            return view;        }    }}

activity_main2.xml

一般只需要一个GridView,这是一个容器控件

<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:id="@+id/activity_main"    android:layout_width="match_parent"    android:layout_height="match_parent"    tools:context="com.riqthen.glidview.MainActivity">    <GridView        android:id="@+id/gv2"        android:layout_width="match_parent"        android:layout_height="match_parent"        android:columnWidth="100dp"        android:padding="10dp"        android:gravity="center"        android:horizontalSpacing="10dp"        android:numColumns="auto_fit"        android:stretchMode="columnWidth"        android:verticalSpacing="10dp" /></RelativeLayout>

item.xml

每个项目的视图,不需要对应的java文件

<?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:gravity="center"    android:orientation="vertical">    <ImageView        android:id="@+id/iv"        android:layout_width="80dp"        android:layout_height="80dp"        android:src="@mipmap/ic_launcher" />    <TextView        android:id="@+id/tv"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="图片" /></LinearLayout>
0 0