Android UI基础之GrideView的使用
2016-01-14 15:46
357 查看
GridView (网格视图)是按照行列的方式来显示内容的, 一般用于显示图片等内容, 比如实现九宫图格,相册预览的界面等,使用GridView是比较方便的。
GridView的常用属性如下:
android:columnWidth : 设置列的宽度
android:horizontalSapcing:两列之间的距离
android:numColumns: 设置列数
android:stretchMode :缩放模式
android:verticalSpacing :两行之间的间距
如下为实例,分别实现带只显示图片的,和实现图片与文字的
一: 只显示图片
效果如下:
![](http://img.blog.csdn.net/20160114155312745?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
在实现GridView的时候需要使用适配器,这里使用自定义适配器,
1:在MainActivity中,将图片资源存放在一个正型数组中(保存图片资源的索引),
2:自定义适配器继承自BaseAdapter 并重写期中的方法
getCount () 获取选项的总数
getItem ()获取每一个选项的具体内容
getItemId ()获取选项的ID 返回所在的位置即可
getView ()该方法用来为每一个选项生成对应的视图 (ImageView)该方法会被多次调用
具体代码如下所示:
public class MainActivity extends AppCompatActivity {
private GridView gridView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
gridView= (GridView)findViewById(R.id.gridView);
gridView.setAdapter(new MyAdapter(this));
}
// 自定义适配器
static class MyAdapter extends BaseAdapter{
private int [] images = {R.mipmap.a,
R.mipmap.a,
R.mipmap.b,
R.mipmap.c,
R.mipmap.d,
R.mipmap.e,
R.mipmap.f,
R.mipmap.a,
R.mipmap.b,
R.mipmap.c,
R.mipmap.d,
R.mipmap.e,
R.mipmap.f,
R.mipmap.a};
private Context context;
private MyAdapter(Context context){
this.context= context;
}
@Override
public int getCount() {
// 获取数组长度
return images.length;
}
@Override
//获取每一个选项
public Object getItem(int position) {
// 返回每一个数组的下标
return images[position];
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ImageView imageView = new ImageView(context);
imageView.setImageResource(images[position]);
return imageView;
}
}
}
二 :显示图片和文字
效果如下:
![](http://img.blog.csdn.net/20160114155402387?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
实现过程如下:
在布局文件中声明GridView
GridView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:numColumns="4"
android:verticalSpacing="10dp"
android:horizontalSpacing="10dp"
android:columnWidth="60dp"
android:gravity="center"
android:stretchMode="columnWidth"
android:id="@+id/gridView2" />
三:在MainActivity 中将文字,与图片的索引分别放在一个字符串,正型数组中,
创建一个类继承BaseAdapter 并实现其中的方法,类似与上面,需要注意的是在getView ()方法中需要加载图片与文本,因此应该提前将布局文件定义好。在getView方法中将组件
”查找“到并且将资源分别设置到响应的组件之中。即可以显示。 (每一部分是由, ImageView与TextView组合而成的)。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:orientation="vertical">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/imageView_use"
android:src="@mipmap/ic_launcher"/>
<TextView
android:id="@+id/text_use"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="New Text"/>
</LinearLayout>
具体代码如下:
public class Main2Activity extends AppCompatActivity {
private GridView gridViewview;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.mian2);
gridViewview = (GridView) findViewById(R.id.gridView2);
gridViewview.setAdapter(new MyAdapters(this));
// 监听事件
gridViewview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
// parent代表当前组件就是Gridview, view对应的是每一个选项的布局(根结点为准)
System.out.println("+++>>>>>"+parent);//
System.out.println("+++>>>>>"+view);// 对应每一个选项的布局
System.out.println("+++>>>>>"+position);// 位置编号
System.out.println("+++>>>>>" + id);// 位置编号
TextView ts = (TextView) view.findViewById(R.id.text_use);
Toast.makeText(Main2Activity.this,"当前选择的是"+ts.getText(),Toast.LENGTH_SHORT).show();
}
});
}
// 内部类优先考虑为静态,效率更高。
static class MyAdapters extends BaseAdapter {
private String[] names = {"北极黑", "北极绿", "北极青", "北极蓝", "北极紫", "北极红"};
private int[] imgs = {R.mipmap.a,
R.mipmap.b,
R.mipmap.c,
R.mipmap.d,
R.mipmap.e,
R.mipmap.f
};
private Context context;
public MyAdapters(Context context) {
this.context = context;
}
@Override
public int getCount() {
return names.length;
}
@Override
public Object getItem(int position) {
return names[position];
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater inflater = LayoutInflater.from(context);
View view = inflater.inflate(R.layout.itemlayout, null);
// 得到两个组件
ImageView iv = (ImageView) view.findViewById(R.id.imageView_use);
TextView tv = (TextView) view.findViewById(R.id.text_use);
iv.setImageResource(imgs[position]);
tv.setText(names[position]);
return view;// 返回的相当于xml文件的布局
}
}
}
GridView的常用属性如下:
android:columnWidth : 设置列的宽度
android:horizontalSapcing:两列之间的距离
android:numColumns: 设置列数
android:stretchMode :缩放模式
android:verticalSpacing :两行之间的间距
如下为实例,分别实现带只显示图片的,和实现图片与文字的
一: 只显示图片
效果如下:
在实现GridView的时候需要使用适配器,这里使用自定义适配器,
1:在MainActivity中,将图片资源存放在一个正型数组中(保存图片资源的索引),
2:自定义适配器继承自BaseAdapter 并重写期中的方法
getCount () 获取选项的总数
getItem ()获取每一个选项的具体内容
getItemId ()获取选项的ID 返回所在的位置即可
getView ()该方法用来为每一个选项生成对应的视图 (ImageView)该方法会被多次调用
具体代码如下所示:
public class MainActivity extends AppCompatActivity {
private GridView gridView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
gridView= (GridView)findViewById(R.id.gridView);
gridView.setAdapter(new MyAdapter(this));
}
// 自定义适配器
static class MyAdapter extends BaseAdapter{
private int [] images = {R.mipmap.a,
R.mipmap.a,
R.mipmap.b,
R.mipmap.c,
R.mipmap.d,
R.mipmap.e,
R.mipmap.f,
R.mipmap.a,
R.mipmap.b,
R.mipmap.c,
R.mipmap.d,
R.mipmap.e,
R.mipmap.f,
R.mipmap.a};
private Context context;
private MyAdapter(Context context){
this.context= context;
}
@Override
public int getCount() {
// 获取数组长度
return images.length;
}
@Override
//获取每一个选项
public Object getItem(int position) {
// 返回每一个数组的下标
return images[position];
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ImageView imageView = new ImageView(context);
imageView.setImageResource(images[position]);
return imageView;
}
}
}
二 :显示图片和文字
效果如下:
实现过程如下:
在布局文件中声明GridView
GridView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:numColumns="4"
android:verticalSpacing="10dp"
android:horizontalSpacing="10dp"
android:columnWidth="60dp"
android:gravity="center"
android:stretchMode="columnWidth"
android:id="@+id/gridView2" />
三:在MainActivity 中将文字,与图片的索引分别放在一个字符串,正型数组中,
创建一个类继承BaseAdapter 并实现其中的方法,类似与上面,需要注意的是在getView ()方法中需要加载图片与文本,因此应该提前将布局文件定义好。在getView方法中将组件
”查找“到并且将资源分别设置到响应的组件之中。即可以显示。 (每一部分是由, ImageView与TextView组合而成的)。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:orientation="vertical">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/imageView_use"
android:src="@mipmap/ic_launcher"/>
<TextView
android:id="@+id/text_use"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="New Text"/>
</LinearLayout>
具体代码如下:
public class Main2Activity extends AppCompatActivity {
private GridView gridViewview;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.mian2);
gridViewview = (GridView) findViewById(R.id.gridView2);
gridViewview.setAdapter(new MyAdapters(this));
// 监听事件
gridViewview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
// parent代表当前组件就是Gridview, view对应的是每一个选项的布局(根结点为准)
System.out.println("+++>>>>>"+parent);//
System.out.println("+++>>>>>"+view);// 对应每一个选项的布局
System.out.println("+++>>>>>"+position);// 位置编号
System.out.println("+++>>>>>" + id);// 位置编号
TextView ts = (TextView) view.findViewById(R.id.text_use);
Toast.makeText(Main2Activity.this,"当前选择的是"+ts.getText(),Toast.LENGTH_SHORT).show();
}
});
}
// 内部类优先考虑为静态,效率更高。
static class MyAdapters extends BaseAdapter {
private String[] names = {"北极黑", "北极绿", "北极青", "北极蓝", "北极紫", "北极红"};
private int[] imgs = {R.mipmap.a,
R.mipmap.b,
R.mipmap.c,
R.mipmap.d,
R.mipmap.e,
R.mipmap.f
};
private Context context;
public MyAdapters(Context context) {
this.context = context;
}
@Override
public int getCount() {
return names.length;
}
@Override
public Object getItem(int position) {
return names[position];
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater inflater = LayoutInflater.from(context);
View view = inflater.inflate(R.layout.itemlayout, null);
// 得到两个组件
ImageView iv = (ImageView) view.findViewById(R.id.imageView_use);
TextView tv = (TextView) view.findViewById(R.id.text_use);
iv.setImageResource(imgs[position]);
tv.setText(names[position]);
return view;// 返回的相当于xml文件的布局
}
}
}
相关文章推荐
- 什么是baseline?release和build
- 改变Label不同的字显示不同的颜色
- NSData与UIImage之间的转换
- lazy懒加载(延迟加载)UITableView
- HDU5146Sequence
- 使用搜索条UISearchBar 谓词实现搜索的判断
- Pop3_解决PKIX:unable to find valid certification path to requested target 的问题
- iOS开发之:dispatch_async 与 dispatch_get_global_queue 的使用方法
- WPF Issues
- Ubuntu出现error:unknown filesystem grub rescue解决办法
- Maven多个mudule只编译、打包指定module
- UGUI中将图片转换成精灵Sprite
- [FAQ14053]L1下拉状态栏QuickSetting没有数据连接
- 使用CAShapeLayer和UIBezierPath绘制色盘
- 解决“Dynamic Web Module 3.0 requires Java 1.6 or newer.”错误
- 从iOS手雷出发-总结iOS多设备UI适配规范方案
- 源码推荐(01.14B):AFN网络请求一句代码搞定,iOS 9最新的UIAlertController
- 通常大家都是用UITableView的两种形式,UITableViewStylePlain,UITableViewStyleGrouped; 其实还有一种类似系统 自带通讯录的那种 Section
- UIImagePickerController从拍照、图库、相册获取图片
- ueditor使用中的问题总结