我们在使用手机的过程中,会看到一些图片配上文字的一些情况,今天我们就来介绍一下安卓控件的GridView

GridView组件用来以网格方式排列视图,与矩阵类似,当屏幕上有很多元素(文字、图片或其他元素)需要显示时,可以使用该组件

二话不说,我们先上图:

今天,我们就来实现这样的一个即显示图片又显示文字的一个GridView

我们首先来分析一下,我们如果想实现这样的一个GridView都需要些什么资源

  说到资源,我们肯定是需要这么一大堆的图片呀~

然后,我们再来分析一下,我们需要在布局文件上做些什么

  首先,我们需要一个我们自定义的每个item的布局

  也就是这个,我们来看一下,这里面有一个ImageView和一个TextView,我们就需要创建这样的一个布局文件

  然后,我们来需要在主布局文件中去定义一个GridView

接下来,我们再分析一下,我们在Activity中应该如何去实现

  我们还是按照套路来。

  首先,我们需要找到GridView这个控件,并准备数据(也就是那一堆图片),然后我们为它写一个适配器

  然后,我们在自定义的适配器上去继承一个BaseAdapter,也就是我们创建了一个基本的适配器

  然后,我们在适配器中去获得一个布局填充器,为了得到我们的item的布局

  然后,我们在适配器中找到item中的控件并赋值

  最后,我们返回这个布局就可以了

接下来,我们按照我们的分析思路,来做一个具体的实现

  首先,我们来看我们写的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"
android:gravity="center"> <ImageView
android:id="@+id/iv_gridView_item"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:adjustViewBounds="true"
android:maxHeight="100dp"
android:maxWidth="100dp"
android:src="@mipmap/ic_launcher"/>
<TextView
android:id="@+id/tv_gridView_item"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="配字"/>
</LinearLayout>

通过上面的文件,我们就创建了item的布局。在这里,我们就可以很清晰的看到我们都对这两个控件做了什么

然后,我们来看我们的主界面的布局文件

<?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_grid_view__main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="application.smile.demo.GridView_MainActivity"> <GridView
android:id="@+id/gridView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:numColumns="3"
android:columnWidth="10dp"
/>
</RelativeLayout>

从上面的布局文件中,我们看到了 我们把这个GridView分成了3列,并且每列的宽度都是10dp

然后,我们来看我们最主要的部分,也就是Activity中的实现

  我们通过findViewById找到我们需要的控件,也就是GridView,而且准备两个数组一个是int类型的图片数组、一个String类型的文字数组),并为其设置适配器

  private int[] images = {R.mipmap.image_29,R.mipmap.image_30,R.mipmap.image_31,R.mipmap.image_32,
R.mipmap.image_33,R.mipmap.image_34,R.mipmap.image_35,
R.mipmap.image_36,R.mipmap.image_37,R.mipmap.image_38,R.mipmap.image_39,
R.mipmap.image_40,R.mipmap.image_41,R.mipmap.image_42,R.mipmap.image_43,};
private String[] text = {"美图一","美图二","美图三","美图四","美图五","美图六","美图七","美图八","美图九","美图十",
"美图十一","美图十二","美图十三","美图十四","美图十五",};
  GridView gridView = (GridView) findViewById(R.id.gridView);
gridView.setAdapter(new MyAdapter(this,images,text));

然后,我们来去创建自定义的适配器继承BaseAdapter,并实现其中的方法

  因为我们的这个适配器是静态的,所以,我们需要将数组和上下文传过来

private LayoutInflater layoutInflater;
private int[] images;
private String[] text;
public MyAdapter(Context context,int[] images,String[] text){
this.images = images;
this.text = text;
layoutInflater = LayoutInflater.from(context);
}

  并且,我们在getCount()方法返回一个我们的数组的长度(这里选哪个数组都可以,反正都是一样的长度~)

@Override
public int getCount() {
return images.length;
}

  然后,我们在getItem(有参数)方法返回我们的数组的元素

@Override
public Object getItem(int position) {
return images[position];
}

  接下来,我们在getItemId(有参数)方法返回我们的数组的每个元素的ID,这里也就是下标

@Override
public long getItemId(int position) {
return position;
}

  接下来,我们就到了最重要的getView(有参数)方法中去做我们在上面思路里的实现了

    我们首先,通过布局填充器去获得我们的每个item的布局

      然后,获得控件

      接下来,设置值(ImageView的值就是我们上面定义的那个int类型的装图片的数组,TextView的值就是我们上面定义的那个String类型的装文字的数组)

      最后我们返回我们的这个View(就是通过布局填充器获得的那个View)

 @Override
public View getView(int position, View convertView, ViewGroup parent) {
View v = layoutInflater.inflate(R.layout.item_grideview_layout,null);
ImageView iv = (ImageView) v.findViewById(R.id.iv_gridView_item);
TextView tv = (TextView) v.findViewById(R.id.tv_gridView_item);
iv.setImageResource(images[position]);
tv.setText(text[position]);
return v;
}

这样,我们的这个小案例就完成了,下面交出源码

public class GridView_MainActivity extends AppCompatActivity {
private int[] images = {R.mipmap.image_29,R.mipmap.image_30,R.mipmap.image_31,R.mipmap.image_32,
R.mipmap.image_33,R.mipmap.image_34,R.mipmap.image_35,
R.mipmap.image_36,R.mipmap.image_37,R.mipmap.image_38,R.mipmap.image_39,
R.mipmap.image_40,R.mipmap.image_41,R.mipmap.image_42,R.mipmap.image_43,};
private String[] text = {"美图一","美图二","美图三","美图四","美图五","美图六","美图七","美图八","美图九","美图十",
"美图十一","美图十二","美图十三","美图十四","美图十五",};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_grid_view__main);
GridView gridView = (GridView) findViewById(R.id.gridView);
gridView.setAdapter(new MyAdapter(this,images,text));
}
private static class MyAdapter extends BaseAdapter{
private LayoutInflater layoutInflater;
private int[] images;
private String[] text;
public MyAdapter(Context context,int[] images,String[] text){
this.images = images;
this.text = text;
layoutInflater = LayoutInflater.from(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) {
View v = layoutInflater.inflate(R.layout.item_grideview_layout,null);
ImageView iv = (ImageView) v.findViewById(R.id.iv_gridView_item);
TextView tv = (TextView) v.findViewById(R.id.tv_gridView_item);
iv.setImageResource(images[position]);
tv.setText(text[position]);
return v;
}
}
}

让程序写入生命,将代码融入灵魂

                    -------smile、zj

Android基本控件之GridView的更多相关文章

  1. Android常用控件之GridView使用BaseAdapter

    我们可以为GridView添加自定义的Adapter,首先看下用自定义Adapter的显示效果 在布局文件main.xml文件中定义一个GridView控件 <RelativeLayout xm ...

  2. Android常用控件之GridView与ExpandableListView的用法

    概述 1.GridView:与ListView相比,可以显示多列,xml布局时其属性numColumns可以设置显示的列数. 2.ExpandableListView:与ListView相比,可以让每 ...

  3. Android 基本控件相关知识整理

    Android应用开发的一项重要内容就是界面开发.对于用户来说,不管APP包含的逻辑多么复杂,功能多么强大,如果没有提供友好的图形交互界面,将很难吸引最终用户.作为一个程序员如何才能开发出友好的图形界 ...

  4. 一个Demo让你掌握Android所有控件

    原文:一个Demo让你掌握Android所有控件 本文是转载收藏,侵删,出处:"安卓巴士"      下面给出实现各个组件的源代码: 1.下拉框实现--Spinner packag ...

  5. Android 开源控件与常用开发框架开发工具类

    Android的加载动画AVLoadingIndicatorView 项目地址: https://github.com/81813780/AVLoadingIndicatorView 首先,在 bui ...

  6. 重新想象 Windows 8.1 Store Apps (93) - 控件增强: GridView, ListView

    [源码下载] 重新想象 Windows 8.1 Store Apps (93) - 控件增强: GridView, ListView 作者:webabcd 介绍重新想象 Windows 8.1 Sto ...

  7. android 基础控件(EditView、SeekBar等)的属性及使用方法

        android提供了大量的UI控件,本文将介绍TextView.ImageView.Button.EditView.ProgressBar.SeekBar.ScrollView.WebView ...

  8. Android基本控件之Menus

    在我们的手机中有很多样式的菜单,比如:我们的短信界面,每条短信,我们长按都会出现一个菜单,还有很多的种类.那么现在,我们就来详细的讨论一下安卓中的菜单 Android的控件中就有这么一个,叫做Menu ...

  9. Android:控件布局(相对布局)RelativeLayout

    RelativeLayout是相对布局控件:以控件之间相对位置或相对父容器位置进行排列. 相对布局常用属性: 子类控件相对子类控件:值是另外一个控件的id android:layout_above-- ...

随机推荐

  1. C#插入排序详解

    这几天一直在研究算法,也算有点心得,现在跟大家分享一下,我是用C#做的 排序算法是想要成为大虾程序员必须要掌握的技术,它其实也是一种思想,你对算法熟悉,对以后编程有很大帮助 算法思路 ⒈ 从第一个元素 ...

  2. ***JAVA多线程的应用场景和应用目的举例

    多线程使用的主要目的在于: 1.吞吐量:你做WEB,容器帮你做了多线程,但是他只能帮你做请求层面的.简单的说,可能就是一个请求一个线程.或多个请求一个线程.如果是单线程,那同时只能处理一个用户的请求. ...

  3. leetcode@ [343] Integer Break (Math & Dynamic Programming)

    https://leetcode.com/problems/integer-break/ Given a positive integer n, break it into the sum of at ...

  4. BestCoder Round #73 (div.2)(hdu 5630)

    Rikka with Chess Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) ...

  5. [iOS 多线程 & 网络 - 2.5] - 小文件上传

    A.文件上传 思路: 发送文件数据给服务器 使用post请求 必须手动设置请求头: 内容大小Content-Length & 内容类型 Content-Type 请求体:文件数据 文件上传的格 ...

  6. UVa 1640 The Counting Problem (数学,区间计数)

    题意:给定两个数m, n,求从 m 到 n 中0-9数字各出现了多少次. 析:看起来挺简单的,其实并不好做,因为有容易想乱了.主要思路应该是这样的,分区间计数,先从个位进行计,一步一步的计算过来.都从 ...

  7. SuperSlidev2.1 轮播图片和无缝滚动

    使用方法,狠狠的点击下面链接 http://down.admin5.com/demo/code_pop/18/562/index.html 简单使用方法如下 html <div class=&q ...

  8. c# 如何使用DLL的config文件中的信息

    我知道用c#编写的exe程序可以读取config文件中的配置信息,比如Test.exe,可以在与Test.exe相同目录下放置一个config文件:Test.exe.config,用System.Co ...

  9. Installation Directory must be on a local hard drive解决办法

    今天带着公司的电脑来杭州这边,同事发来一个Sliksubversion.msi来进行安装,由于系统是win8.1的,直接点击安装不了,真的是醉了,于是乎发挥度娘的力量找到了答案,这里贴出来,供大家来参 ...

  10. 正整数的n次方求和

    引理: (Abel分部求和法) $$\sum_{k=1}^{n}a_{k}b_{k}=A_{n}b_{n}+\sum_{k=1}^{n-1}A_{k}(b_{k}-b_{k+1})$$其中$A_{k} ...