Android中GridView的使用
来源:互联网 发布:js获取div的内容 编辑:程序博客网 时间:2024/05/17 07:29
一、相对于listView与recycleView来说,gridView有相对的优势,gridView根据数据类的数量来生成多少个,如果有一天数据的数量发生了改变,gridView会自动去适应。而这一点listView与recycleView是决定做不到的。
二、官方文档:GridView
extends AbsListView
A view that shows items in two-dimensional scrolling grid. The items in the grid come from the ListAdapter associated with this view.
大致意思:显示数据表格
继承 AbsListView
一个视图显示在二维网格滚动视图显示项。网格中的显示项来自ListAdapter与这一观点。
三、使用:
1.显示一张图片的gridView:
MainActivity中:
public class MainActivity extends AppCompatActivity { private GridView gridView; private MainAdapter mainAdapter; private int[] images; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); gridView = (GridView) findViewById(R.id.gv); mainAdapter = new MainAdapter(this); images = new int[]{R.mipmap.ic_launcher, R.mipmap.ic_launcher, R.mipmap.ic_launcher, R.mipmap.ic_launcher, R.mipmap.ic_launcher, R.mipmap.ic_launcher, R.mipmap.ic_launcher, R.mipmap.ic_launcher, R.mipmap.ic_launcher, R.mipmap.ic_launcher}; //GridView的点击事件 gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { Toast.makeText(MainActivity.this, "点击了" + i, Toast.LENGTH_SHORT).show(); } }); mainAdapter.setImages(images); gridView.setAdapter(mainAdapter); }}
MainActivity的布局文件:
<?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:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.example.mac.gridviewdemo.MainActivity"> <GridView android:id="@+id/gv" android:layout_width="wrap_content" android:layout_height="wrap_content" android:horizontalSpacing="10dp" android:numColumns="4"android:stretchMode="columnWidth" android:verticalSpacing="10dp" /> <!--numColumns:设置列数 horizontalSpacing:设置水平间隔 verticalSpacing:设置垂直间隔stretchMode:定义列应如何拉伸以填充可用的空白,如果有的话。值必须是: none: 延长被禁止。 spacingWidth: 每一列之间的间距被拉伸。 columnWidth: 每列被均等地拉伸。 spacingWidthUniform: 每一列之间的间距被均匀拉伸。--></RelativeLayout>
MainAdapter:
package com.example.mac.gridviewdemo;import android.content.Context;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.ImageView;/** * Created by mac on 16-8-11. */public class MainAdapter extends BaseAdapter { private Context context; private int[] images; public void setImages(int[] images) { this.images = images; notifyDataSetChanged(); } public MainAdapter(Context context) { this.context = context; } @Override public int getCount() { return images.length; } @Override public Object getItem(int i) { return i; } @Override public long getItemId(int i) { return i; } @Override public View getView(int i, View view, ViewGroup viewGroup) { MyView myView = null; if (view == null) { view = LayoutInflater.from(context).inflate(R.layout.item, viewGroup, false); myView = new MyView(view); view.setTag(myView); }else { myView = (MyView) view.getTag(); } //设置数据 myView.imageView.setImageResource(images[i]); //设置边界对齐 myView.imageView.setAdjustViewBounds(false); //设置刻度的类型 myView.imageView.setScaleType(ImageView.ScaleType.CENTER_CROP); //设置间距 myView.imageView.setPadding(10,10,10,10); return view; } class MyView { private ImageView imageView; MyView(View itemView) { imageView = (ImageView) itemView.findViewById(R.id.iv); } }}
item的布局文件:
<?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" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@mipmap/ic_launcher" /></LinearLayout>
2.显示一张图片和文字的
TwoActivity:
package com.example.mac.gridviewdemo;import android.os.Bundle;import android.support.annotation.Nullable;import android.support.v7.app.AppCompatActivity;import android.widget.GridView;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;/** * Created by mac on 16-8-11. */public class TwoActivity extends AppCompatActivity { private GridView gridView; private int[] images; private TwoAdapter twoAdapter; List<Map<String, Object>> list = new ArrayList<>(); @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_two); twoAdapter = new TwoAdapter(this); gridView = (GridView) findViewById(R.id.two_gv); images = new int[]{R.mipmap.ic_launcher, R.mipmap.ic_launcher, R.mipmap.ic_launcher, R.mipmap.ic_launcher, R.mipmap.ic_launcher, R.mipmap.ic_launcher, R.mipmap.ic_launcher, R.mipmap.ic_launcher, R.mipmap.ic_launcher, R.mipmap.ic_launcher}; for (int i = 0; i < images.length; i++) { Map<String, Object> map = new HashMap<>(); map.put("iamge", images[i]); map.put("text", "测试" + i); list.add(map); } twoAdapter.setList(list); gridView.setAdapter(twoAdapter); }}
TwoActivity的布局文件:
<?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/two_gv" android:layout_width="wrap_content" android:layout_height="wrap_content" android:horizontalSpacing="10dp" android:numColumns="2" android:verticalSpacing="10dp" /></LinearLayout>
TwoAdapter:
package com.example.mac.gridviewdemo;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 java.util.List;import java.util.Map;/** * Created by mac on 16-8-11. */public class TwoAdapter extends BaseAdapter { private Context context; private List<Map<String, Object>> list; public void setList(List<Map<String, Object>> list) { this.list = list; notifyDataSetChanged(); } public TwoAdapter(Context context) { this.context = context; } @Override public int getCount() { return list.size(); } @Override public Object getItem(int i) { return i; } @Override public long getItemId(int i) { return i; } @Override public View getView(int i, View view, ViewGroup viewGroup) { Twoview twoview = null; if (view == null) { view = LayoutInflater.from(context).inflate(R.layout.item_two, viewGroup,false); twoview = new Twoview(view); view.setTag(twoview); } else { twoview = (Twoview) view.getTag(); } //设置数据 int a = (int) list.get(i).get("iamge"); String name = (String) list.get(i).get("text"); twoview.imageView.setImageResource(a); twoview.textView.setText(name); return view; } class Twoview { private ImageView imageView; private TextView textView; Twoview(View itemView) { imageView = (ImageView) itemView.findViewById(R.id.item_two_iv); textView = (TextView) itemView.findViewById(R.id.item_two_tv); } }}
item的布局文件:
<?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/item_two_iv" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@mipmap/ic_launcher" /> <TextView android:id="@+id/item_two_tv" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="aa" /></LinearLayout>
四、gridView添加点击事件的时候,需要注意一下,有人写完之后发现点击事件为什么会不好用呢?起始你仔细看一下,是不是你的item布局中的子视图是Button,你把Button改了TextView就好了,可有人就会问为什么需要改了呢?因为Button会剥夺焦点事件,所以会使gridView的点击事件不好用。
本人菜鸟一个,有什么不对的地方希望大家指出评论,大神勿喷,希望大家一起学习进步!
- Android中GridView的使用
- android中GridView的使用
- android中GridView的使用
- Android中GridView的使用
- Android中GridView使用
- Android中GridView使用
- Android中GridView使用
- Android中GridView使用
- Android中GridView使用
- Android中GridView使用
- Android中GridView使用
- Android中GridView使用
- Android中GridView使用
- Android中GridView使用
- Android中GridView组件的使用
- Android开发中GridView的使用
- Android GridView的使用
- Android的GridView使用
- 一道数学题——井水抽水问题
- Ugly Numbers(set,queue,vector) -uva 136
- Erlang里的Record
- QQ通信原理及QQ是怎么穿透内网进行通信的?
- intelliJ idea14.1创建servlet提示cannot resolve symbol‘servlet’的问题
- Android中GridView的使用
- 网络编程之HTTP
- Leetcode 13 Roman to Integer
- 比较简单的日历签到(没有第三方框架)
- 论CSS3伪元素(::)与伪类(:)的区别
- 1034. 有理数四则运算(20)
- Reverse Linked List
- linux驱动开发:按键2
- 关于使用UDP(TCP)跨局域网,NAT穿透的心得