【Android】10.3 网格视图(GridView)
分类:C#、Android、VS2015;
创建日期:2016-02-19
一、简介
网格视图(GridView)是在GridLayout的基础上添加了滚动功能的视图,即:GridView用于在可滚动的2D网格空间中显示包含大量单元格的项(每项都是一个视图),例如每个单元格显示一个图片,当图片较多时,还可以上下滚动查看。
要使用GridView,需要先编写一个视图适配器(一般用继承自BaseAdapter<T>的适配器类来实现),再利用它来依次填充每个单元格,例如,将图片按先行后列(或者先列后行)依次插入到每个单元格中。
二、示例1-GridView基本用法
本例演示如何用GridView创建一个用缩略图组成的网格。当某一项被选中时,弹出显示该图像位置的Toast消息提示框。如果图像较多,还可以上下滚动查看。
1、运行截图
2、设计步骤
(1)添加ch1001_GridViewDemo.axml文件
在Resources/layout文件夹下添加该文件。
<?xml version="1.0" encoding="utf-8"?>
<GridView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/gridview1"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:columnWidth="90dp"
android:numColumns="auto_fit"
android:verticalSpacing="10dp"
android:horizontalSpacing="10dp"
android:stretchMode="columnWidth"
android:gravity="center" />
创建的GridView将自动填满整个屏幕。
(2)添加ch1001MyImageAdapter.cs文件
在SrcDemos文件夹下添加该文件。
这里再重复一遍,键入下面的代码后,单击小灯泡右侧的三角符号,然后单击“实现接口”,它就会自动添加对应的方法,而不是你自己一点一点敲进去的。凡是需要实现接口的地方都是这样做的。
class ch1001MyImageAdapte : BaseAdapter<int>
{
}
该文件的完整代码如下:
using Android.Content;
using Android.Views;
using Android.Widget; namespace MyDemos.SrcDemos
{
class ch1001MyImageAdapte : BaseAdapter<int>
{
Context context;
int[] thumbIds =
{
Resource.Drawable.ch05sample_2, Resource.Drawable.ch05sample_3,
Resource.Drawable.ch05sample_4, Resource.Drawable.ch05sample_5,
Resource.Drawable.ch05sample_6, Resource.Drawable.ch05sample_7,
Resource.Drawable.ch05sample_0, Resource.Drawable.ch05sample_1,
Resource.Drawable.ch05sample_2, Resource.Drawable.ch05sample_3,
Resource.Drawable.ch05sample_4, Resource.Drawable.ch05sample_5,
Resource.Drawable.ch05sample_6, Resource.Drawable.ch05sample_7,
Resource.Drawable.ch05sample_0, Resource.Drawable.ch05sample_1,
Resource.Drawable.ch05sample_2, Resource.Drawable.ch05sample_3,
Resource.Drawable.ch05sample_4, Resource.Drawable.ch05sample_5,
Resource.Drawable.ch05sample_6, Resource.Drawable.ch05sample_7
}; public ch1001MyImageAdapte(Context c)
{
context = c;
} public override int this[int position]
{
get { return 0; }
} public override int Count
{
get { return thumbIds.Length; }
} public override long GetItemId(int position)
{
return 0;
} public override View GetView(int position, View convertView, ViewGroup parent)
{
ImageView imageView;
if (convertView == null)
{
imageView = new ImageView(context);
imageView.LayoutParameters = new GridView.LayoutParams(200, 200);
imageView.SetScaleType(ImageView.ScaleType.CenterCrop);
imageView.SetPadding(8, 8, 8, 8);
}
else
{
imageView = (ImageView)convertView;
}
imageView.SetImageResource(thumbIds[position]);
return imageView;
}
}
}
代码说明:
通常情况下,GetItem(int)应该返回一个适配器中指定位置的真实对象,GetItemId(int)应该返回组件的真实编号,但是在本例中都用不到,所以返回什么值都无所谓。
SetLayoutParams(ViewGroup.LayoutParams) 设置视图的高度和宽度,这样可确保不论原图像的大小如何都能适当的调整大小和裁减。
SetScaleType(ImageView.ScaleType) 声明了图像将依照中心进行裁减(如果需要的话)。
SetPadding(int, int, int, int)定义了如何填充内边距。(注意,如果图像有不同的纵横比,当图像不匹配ImageView给定的尺寸时,内边距较小会导致图像有更多的裁减)。
如果传给GetView()的视图不为空,则ImageView会由可重复使用的View初始化。
在GetView()方法的最后,传入的position参数用于从被作为ImageView资源的mThumbIds数组中选择图像。
剩下的就是定义drawable资源的thumbIds数组。
也可以使用imageView.SetAdjustViewBounds(boolean)让其自动适应图像的大小,用法很简单,直接用该语句替换掉SetLayoutParams()方法即可。
(3)添加ch1001GridViewDemo.cs文件
在SrcDemos文件夹下添加该文件。
using Android.App;
using Android.OS;
using Android.Widget; namespace MyDemos.SrcDemos
{
[Activity(Label = "【例10-1】网格视图基本用法")]
public class ch1001GridViewDemo : Activity
{
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
SetContentView(Resource.Layout.ch1001_GridViewDemo);
var gridview = FindViewById<GridView>(Resource.Id.gridview1);
gridview.Adapter = new ch1001MyImageAdapte(this);
gridview.ItemClick += (s, e) =>
{
Toast.MakeText(this, e.Position.ToString(), ToastLength.Short).Show();
};
}
}
}
当单击网格中的某项时,这里仅用Toast消息框显示所选中的网格的位置索引号(从零开始计算)。在实际程序中,可以通过位置索引号获取其全尺寸图像以备其他用途。
【Android】10.3 网格视图(GridView)的更多相关文章
- android学习之--网格视图(GridView)和图像切换器(ImageSwitcher)
GridView用于在界面上按行.列分布显示多个组件.GridView和ListView有共同父类:AbsListView. GridView与ListView的差别在于:ListV ...
- Android学习笔记27:网格视图GridView的使用
网格视图GridView的排列方式与矩阵类似,当屏幕上有很多元素(文字.图片或其他元素)需要按矩阵格式进行显示时,就可以使用GridView控件来实现. 本文将以一个具体的实例来说明如何使用GridV ...
- Android 网格视图GridView的使用
网格视图GridView的排列方式与矩阵类似,当屏幕上有很多元素(文字.图片或其他元素)需要按矩阵格式进行显示时,就可以使用GridView控件来实现. 本文将以一个具体的实例来说明如何使用GridV ...
- 网格视图GridView的使用
网格视图GridView的排列方式与矩阵类似,当屏幕上有很多元素(文字.图片或其他元素)需要按矩阵格式进行显示时,就可以使用GridView控件来实现. 本文将以一个具体的实例来说明如何使用GridV ...
- Android 自学之网格试图(GridView)和图片切换器(ImageSwitcher)功能和用法
网格试图(GridView)用于在界面上按行,列分布的方式来显示多个组件. GridView和ListView有共同的父类:AbsListView,因此GridView和ListView具有一定的相似 ...
- [转]Android网格视图(GridView)
GridView的一些属性: 1.android:numColumns=”auto_fit” //GridView的列数设置为自动,也可以设置成2.3.4…… 2.android:columnWi ...
- Android网格视图(GridView)
GridView的一些属性: 1.android:numColumns=”auto_fit” //GridView的列数设置为自动,也可以设置成2.3.4…… 2.android:columnWi ...
- Android——网格视图 GridView
activity_activitygrid.xml <?xml version="1.0" encoding="utf-8"?> <GridV ...
- andorid 网格视图GridView
.xml <?xml version="1.0" encoding="utf-8"?> <GridView xmlns:android=&qu ...
随机推荐
- 能说明你的Javascript技术很烂的五个原因
Javascript在互联网上名声很臭,但你又很难再找到一个像它这样如此动态.如此被广泛使用.如此根植于我们的生活中的另外一种语言.它的低学习门槛让很多人都称它为学前脚本语言,它另外一个让人嘲笑的东西 ...
- 如何不使用pthread_cancel而杀死线程
http://www.cnblogs.com/no7dw/archive/2012/09/27/2705847.html During the time I use standalone cross ...
- ubuntu server vsftpd 匿名用户上传下载及目录设置
ubuntu server vsftpd 匿名用户上传下载及目录设置 1:vsftpd服务器安装: sudo apt-get install vsftpd #安装 cd /srv/ #切换到默认匿名用 ...
- Oracle 删除表中记录 如何释放表及表空间大小
1.查看一个表所占的空间大小:SELECT bytes/1024/1024 ||'MB' TABLE_SIZE ,u.* FROM USER_SEGMENTS U WHERE U.SEGMENT_NA ...
- shell脚本中的几个括号总结(小括号/大括号/花括号)
from:http://www.cnblogs.com/hanyan225/archive/2011/10/06/2199652.html 是毋庸置疑的,方便了我们也迷惑了我们,比如这些杂七杂八的括号 ...
- java RandomAccessFile类(随机访问文件)
该类可以实现对同一个文件的读写操作,与其他IO流不同的是可以指定读写指针的脚标(seek),有跳过指定个数字节(skipBytes)操作. 另外该类也可用于断点续传. 简单示例如下: import j ...
- TP2.0或3.1 或者 3.2 下使用ajax+php做无刷新分页(转+自创)
1.前言 作为一名php程序员,我们开发网站主要就是为了客户从客户端进行体验,在这里,thinkphp框架自带的分页类是每次翻页都要刷新一下整个页面,这种翻页的用户体验显然是不太理想的,我们希望每次翻 ...
- ScriptManager.RegisterAsyncPostBackControl 方法
来源:VS2012帮助文档 用途: 将控件注册为异步回发的触发器 语法: public void RegisterAsyncPostBackControl( Control control ) 参数 ...
- HDUOJ --2544最短路(基础)
输入包括多组数据.每组数据第一行是两个整数N.M(N<=100,M<=10000),N表示成都的大街上有几个路口,标号为1的路口是商店所在地,标号为N的路口是赛场所在地,M则表示在成都有几 ...
- C++知识整理(进制)
++输出二进制.十进制.八进制和十六进制总结 分类: C++ 2013-01-14 02:26 592人阅读 评论(0) 收藏 举报 在C++中,默认状态下,数据按十进制输入输出.如果要求按八进制或十 ...