GridView官方教程及示例
Grid View
GridView
is a ViewGroup
that displays items in a two-dimensional, scrollable grid. The grid items are automatically inserted to the layout using a ListAdapter
.
For an introduction to how you can dynamically insert views using an adapter, read Building Layouts with an Adapter.
Example
In this tutorial, you'll create a grid of image thumbnails. When an item is selected, a toast message will display the position of the image.
- Start a new project named HelloGridView.
- Find some photos you'd like to use, or download these sample images. Save the image files into the project's
res/drawable/
directory. - Open the
res/layout/main.xml
file and insert the following:<?xml version="1.0" encoding="utf-8"?>
<GridView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/gridview"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:columnWidth="90dp"
android:numColumns="auto_fit"
android:verticalSpacing="10dp"
android:horizontalSpacing="10dp"
android:stretchMode="columnWidth"
android:gravity="center"
/>This
GridView
will fill the entire screen. The attributes are rather self explanatory. For more information about valid attributes, see theGridView
reference. - Open
HelloGridView.java
and insert the following code for theonCreate()
method:public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main); GridView gridview = (GridView) findViewById(R.id.gridview);
gridview.setAdapter(new ImageAdapter(this)); gridview.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View v,
int position, long id) {
Toast.makeText(HelloGridView.this, "" + position,
Toast.LENGTH_SHORT).show();
}
});
}After the
main.xml
layout is set for the content view, theGridView
is captured from the layout withfindViewById(int)
. ThesetAdapter()
method then sets a custom adapter (ImageAdapter
) as the source for all items to be displayed in the grid. TheImageAdapter
is created in the next step.To do something when an item in the grid is clicked, the
setOnItemClickListener()
method is passed a newAdapterView.OnItemClickListener
. This anonymous instance defines theonItemClick()
callback method to show aToast
that displays the index position (zero-based) of the selected item (in a real world scenario, the position could be used to get the full sized image for some other task). - Create a new class called
ImageAdapter
that extendsBaseAdapter
:import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.GridView;
import android.widget.ImageView; public class ImageAdapter extends BaseAdapter {
private Context mContext;
// references to our images
private Integer[] mDatas = {
R.drawable.sample_2, R.drawable.sample_3,
R.drawable.sample_4, R.drawable.sample_5,
R.drawable.sample_6, R.drawable.sample_7,
R.drawable.sample_0, R.drawable.sample_1,
R.drawable.sample_2, R.drawable.sample_3,
R.drawable.sample_4, R.drawable.sample_5,
R.drawable.sample_6, R.drawable.sample_7,
R.drawable.sample_0, R.drawable.sample_1,
R.drawable.sample_2, R.drawable.sample_3,
R.drawable.sample_4, R.drawable.sample_5,
R.drawable.sample_6, R.drawable.sample_7
}; public ImageAdapter(Context c) {
mContext = c;
} public int getCount() {
return mDatas.length;
} public Object getItem(int position) {
return null;
} public long getItemId(int position) {
return ;
} // create a new ImageView for each item referenced by the Adapter
public View getView(int position, View convertView, ViewGroup parent) {
ImageView imageView;
if (convertView == null) {
// if it's not recycled, initialize some attributes
imageView = new ImageView(mContext);
imageView.setLayoutParams(new GridView.LayoutParams(, ));
imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
imageView.setPadding(, , , );
} else {
imageView = (ImageView) convertView;
} imageView.setImageResource(mDatas[position]); return imageView;
}
}First, this implements some required methods inherited from
BaseAdapter
. The constructor andgetCount()
are self-explanatory. Normally,getItem(int)
should return the actual object at the specified position in the adapter, but it's ignored for this example. Likewise,getItemId(int)
should return the row id of the item, but it's not needed here.The first method necessary is
getView()
. This method creates a newView
for each image added to theImageAdapter
. When this is called, aView
is passed in, which is normally a recycled object (at least after this has been called once), so there's a check to see if the object is null. If it is null, anImageView
is instantiated and configured with desired properties for the image presentation:setLayoutParams(ViewGroup.LayoutParams)
sets the height and width for the View—this ensures that, no matter the size of the drawable, each image is resized and cropped to fit in these dimensions, as appropriate.setScaleType(ImageView.ScaleType)
declares that images should be cropped toward the center (if necessary).setPadding(int, int, int, int)
defines the padding for all sides. (Note that, if the images have different aspect-ratios, then less padding will cause more cropping of the image if it does not match the dimensions given to the ImageView.)
If the
View
passed togetView()
is not null, then the localImageView
is initialized with the recycledView
object.At the end of the
getView()
method, theposition
integer passed into the method is used to select an image from themThumbIds
array, which is set as the image resource for theImageView
.All that's left is to define the
mThumbIds
array of drawable resources. - Run the application.
Try experimenting with the behaviors of the GridView
and ImageView
elements by adjusting their properties. For example, instead of using setLayoutParams(ViewGroup.LayoutParams)
, try using setAdjustViewBounds(boolean)
.
GridView官方教程及示例的更多相关文章
- React Native 教程:001 - 如何运行官方控件示例 App
原文发表于我的技术博客 本文主要讲解了如何运行 React Native 官方控件示例 App,包含了一些 React Native 的基础知识以及相关环境的配置. 原文发表于我的技术博客 React ...
- 微信小程序 教程及示例
作者:初雪链接:https://www.zhihu.com/question/50907897/answer/128494332来源:知乎著作权归作者所有,转载请联系作者获得授权.微信小程序正式公测, ...
- OpenGL官方教程——着色器语言概述
OpenGL官方教程——着色器语言概述 OpenGL官方教程——着色器语言概述 可编程图形硬件管线(流水线) 可编程顶点处理器 可编程几何处理器 可编程片元处理器 语言 可编程图形硬件管线(流水线) ...
- 微信公开课发布微信官方教程:教你用好微信JS-SDK接口
微信公众平台开放JS-SDK(微信内网页开发工具包),说明文档已经有相关使用方法和示例了,很多同学觉得不是很直观,为此微信公开课发布微信官方教程:教你用好微信JS-SDK接口. 1.分享类接口:支持获 ...
- 转:Android官方MVP架构示例项目解析
转自: http://www.infoq.com/cn/articles/android-official-mvp-architecture-sample-project-analysis 作者 吕英 ...
- Asp.Net MVC4.0 官方教程 入门指南之三--添加一个视图
Asp.Net MVC4.0 官方教程 入门指南之三--添加一个视图 在本节中,您需要修改HelloWorldController类,从而使用视图模板文件,干净优雅的封装生成返回到客户端浏览器HTML ...
- Asp.Net MVC4.0 官方教程 入门指南之二--添加一个控制器
Asp.Net MVC4.0 官方教程 入门指南之二--添加一个控制器 MVC概念 MVC的含义是 “模型-视图-控制器”.MVC是一个架构良好并且易于测试和易于维护的开发模式.基于MVC模式的应用程 ...
- Spring 官方教程:使用 Restdocs 创建 API 文档
https://mp.weixin.qq.com/s?__biz=MzU0MDEwMjgwNA==&mid=2247483998&idx=1&sn=6ae5fa795d36b1 ...
- DroidParts 中文系列教程(基于官方教程)
DroidParts中文系列教程(基于官方教程) (一)DroidParts框架概况 2014年4月18日星期五 11:36 他是一个精心构造的安卓框架,包括下面这些基本功能 DI依赖注入,可以注入V ...
随机推荐
- boost安装
虽然很多Boost组件都只有头文件,不需要编译,但是有些Boost组件,如program_options.regex等还是需要编译生成库的.考虑到目前的程序需要用到program_options.re ...
- mysql 查询
查询数据:select s_name from student limit 1;//限制数量 select * from student where s_id in (select s_id from ...
- 在eclipse中使用jax-ws构建webservices服务端和客户端
服务端: package com.yinfu.service; import javax.jws.WebService; import javax.xml.ws.Endpoint; @WebServi ...
- Java 8 VM GC Tunning Guide Charter 7-8-b
第七章 并发gc Java 8提供两种并发gc,CMS和G1 Concurrent Mark Sweep (CMS) Collector This collector is for applicati ...
- android 开发自建wifi热点的默认ip
android 开发自建wifi热点的默认ip是:192.168.43.1 (小米3测试)
- java mail实现Email的发送,完整代码
java mail实现Email的发送,完整代码 1.对应用程序配置邮件会话 首先, 导入jar <dependencies> <dependency> <groupId ...
- 【BZOJ】【2729】【HNOI2012】排队
排列组合+高精度 Orz PoPoQQQ 引用题解: 嗯……学习了一下python= =懒的写高精了 /************************************************ ...
- [BC]BestCoder Round#86小结
1001 [题意] 给定一个长度为n(n<=100000)的正整数序列,给出m(m<=100000)个子集合和的记录,问哪些一定比正确的记录多了 [题解] 对正整数序列求和,记录比和大的一 ...
- 关于Backtracing中有重复元素的处理办法
backtracing是一个常用的解法.之前遇到一个题目,求一个集合的子集, 例如给定{1,2,3,4,5},求其大小为3的子集. 利用backtracing可以较快的给出答案. 然而,该题还有一个变 ...
- Oracle session连接数和inactive的问题记录
Oracle session连接数和inactive的问题记录 http://timnity.javaeye.com/blog/280383 从上周起,服务器Oracle数据库出现问题,用不到半天,就 ...