首页 » 软件编程 » Android

Android【GridView使用】

Android 2022-01-01

安卓GridView使用实例

GridView与ListView的用法基本一致,不同的只是布局。当我们打开手机,应用会以宫格显示,那就是GridView。 以代码形式展示,本次适配器使用BaseAdapter,熟悉了适配器的用法,就只需要注意几个GridView的属性即可。

1、GridView首先必须了解的地方??

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

  2. GridView是一个在二维可滚动的网格中展示内容的控件。网格中的内容通过使用adapter自动插入到布局中。

  3. 程序中,首先使用findViewById方法获取到了GridView控件,接下来使用setAdapter方法给它设置提供数据的适配器。

  4. 常用属性:

    • android:numColumns="auto_fit" ---------列数设置为自动
    • android:columnWidth="90dp",----------每列的宽度,也就是Item的宽度
    • android:stretchMode="columnWidth"------缩放与列宽大小同步
    • android:verticalSpacing="10dp"-----------垂直边距
    • android:horizontalSpacing="10dp"---------水平边距
  5. 基本步骤:

    1、准备数据源

    2、新建适配器

    3、加载适配器

写在前面:??

如果在程序中遇到字符乱码问题,请在build.gradle中android部分内加入以下代码

//参照物:buildToolsVersion "29.0.3" Code> android{compileOptions.encoding="GBK"} //参照物defaultConfig {...} 

2、分步解析

1、首先打开布局文件,添加GridView控件,推荐在RelativeLayout内进行

<GridView
        android:id="@+id/grid"
        android:layout_centerInParent="true"
        android:paddingVertical="150dp" //与上下边的间距
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:paddingHorizontal="30dp"//与左右边的间距
        android:numColumns="2"/> 

2、创建子布局,本实例仅使用文字

<?xml version="1.0" encoding="utf-8"?> <RelativeLayout ******************** android:padding="30dp"> // android:padding行高设置参数 <TextView android:gravity="center" android:id="@+id/text" android:layout_centerInParent="true" android:layout_width="200dp" android:layout_height="100dp"/> </RelativeLayout> 

写在中间:??

假如发现inflater.inflate()方法找不到自己的子布局时,重启Andorid Studio就可以了

3、创建Adapter(本次使用BaseAdapter)

public class gridadapter extends BaseAdapter { private int[] colors; //背景颜色 private String[] titles; //文字内容 private Context context; private LayoutInflater inflater; public gridadapter(int[] colors,String[] titles, Context context) {//适配器 super(); this.colors = colors; this.titles = titles; this.context = context; this.inflater = LayoutInflater.from(context); } @Override public int getCount() { return titles.length; } @Override public Object getItem(int position) { return titles[position]; } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View v, ViewGroup parent) { v = inflater.inflate(R.layout.item, null); v.setBackgroundColor(colors[position]); TextView tv= (TextView) v.findViewById(R.id.text); tv.setText(titles[position]); return v; } } 

4、MainActivity内容

public class MainActivity extends AppCompatActivity { private String[] string = { "足球场", "游泳馆", "羽毛球馆", "篮球场", "网球场","奥体用餐中心"}; private int[] color = { Color.parseColor("#C908B1EE"), Color.parseColor("#C9168DFA"), Color.parseColor("#C985ABE2"), Color.parseColor("#C907AB68"), Color.parseColor("#C9DF7808"), Color.parseColor("#C9E45816")}; private GridView gd; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); gd = findViewById(R.id.grid); gd.setAdapter(new gridadapter(color,string, this)); } } 

5、点击事件参考:

gd.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { int po=position+1; switch (position){ case 0: Toast.makeText(MainActivity.this, "Clicked "+po+" !", Toast.LENGTH_SHORT).show(); break; case 1: Toast.makeText(MainActivity.this, "Clicked "+po+" !", Toast.LENGTH_SHORT).show(); break; case 2: Toast.makeText(MainActivity.this, "Clicked "+po+" !", Toast.LENGTH_SHORT).show(); break; case 3: Toast.makeText(MainActivity.this, "Clicked "+po+" !", Toast.LENGTH_SHORT).show(); break; case 4: Toast.makeText(MainActivity.this, "Clicked "+po+" !", Toast.LENGTH_SHORT).show(); break; } } }); 

3、附赠:

1、BaseAdapter,有几个必须实现的方法,如下所示:

方法 介绍
getCount() getCount() 返回需要展示的GridView的项数。
getItem() getItem(int position) 返回给定位置的数据对象
getItemId() getItemId(int position) 返回该项的行id
getView() getView(int position, View convertView, ViewGroup parent) 必须要实现的方法,该方法控制GridView中数据项的显示,方法中的convertView视图是被复用的视图,在实现时对其进行判断,如果为null,则新建视图,否则直接复用视图。

2、布局文件中GridView的重要属性

布局属性 相关方法 介绍
android:columnWidth setColumnWidth(int) 定义每一列的固定宽度
android: gravity set Gravity(int) 定义每一个单元格的重心
android:horizontalSpacing setHorizontalSpacing(int) 定义了两列之间的水平间隔
android:numColumns setNumColumns(int) 定义了展示的列数,int或auto_fit
android:stretchMode setStretchMode(int) 定义了列拓展填充有限闲置空间的方式
android:verticalSpacing setVerticalSpacing(int) 定义两行之间的垂直间隔。属性设置要求同android:columnWidth

Gravity的参数:

常量 描述
top 0x30 将对象放在它的容器的顶部,不会改变它的大小
bottom 0x50 将对象放在它的容器的底部,不会改变它的大小
left 0x03 将对象放在它的容器的左面,不会改变它的大小
right 0x05 将对象放在它的容器的右面,不会改变它的大小
center_vertical 0x10 将对象放在它的容器垂直方向的中心,不会改变它的大小
fill_vertical 0x70 如果需要改变对象的垂直大小以完全填充它的容器
center_horizontal 0x01 将对象放在它的容器水平方向的中心,不会改变它的大小
fill_horizontal 0x07 如果需要改变对象的水平大小以完全填充它的容器
center 0x11 将对象放在它的容器的中心,不会改变它的大小
fill 0x77 如果需要改变对象的水平和垂直方向的大小以完全填充它的容器
clip_vertical 0x80 附加选项被设置用来将子视图的上面或下面边缘裁剪到它的容器的边界。这个裁剪基于垂直方向的重心:top重心将会裁剪底部边缘,bottom重心将会裁剪顶部边缘,不会同时裁剪两边
clip_horizontal 0x08 附加选项被设置用来将子视图的左面或右面边缘裁剪到它的容器的边界。这个裁剪基于水平方向的重心:left重心将会裁剪右面边缘,right重心将会裁剪左面边缘,不会同时裁剪两边
start 0x00800003 将对象放在它的容器的起始位置,不会改变它的大小
end 0x00800005 将对象放在它的容器的末尾位置,不会改变它的大小

3、重要方法

  1. ListAdapter:getAdapter()
    返回关联的Adapter
  2. int:getColumnWidth()
    返回列的宽度
  3. int:getGravity()
    返回描述子视图被放置的方式的标识。默认为Gravity. LEFT。
  4. int:getHorizontalSpacing()
    返回列间的水平间隔大小。
    仅会计算当前布局。如果调用了setHorizontalSpacing(int)来设置间隔,但布局还没有完成,这个方法会返回一个旧值。如果想要明确地获取这个间隔,使用getRequestedHorizontalSpacing()方法请求。
  5. int:getNumColumns()
    返回列数。如果网格没有被布局,则返回AUTO_FIT。
  6. int:getRequestedColumnWidth()
    返回请求的列宽度。
    这可能不是真实的列宽度。使用getColumnWidth()获取当前真实的列宽度。
  7. int:getRequestedHorizontalSpacing()
    返回请求的列间的水平间隔。
    这个值可能是布局期间的局部样式,也可能是默认的样式,或是使用setHorizontalSpacing(int)方法设置的值。如果布局尚未完成或GridView计算得到了一个和请求的不同的水平间隔,它与
  8. getHorizontalSpacing()将有不同的返回值。
  9. int:getStretchMode()
    返回扩展模式。
  10. int:getVerticalSpacing()
    返回行间的垂直间隔。
  11. onInitializeAccessibilityNodeInfoForItem(View view, int position, AccessibilityNodeInfo info)
    使用列表中实际项的信息初始化一个AccessibilityNodeInfo。

4、具体示例

activity_main.xml

<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity" android:background="@mipmap/timg"> <GridView android:layout_centerInParent="true" android:id="@+id/grid" android:paddingVertical="150dp" android:layout_width="wrap_content" android:layout_height="wrap_content" android:paddingHorizontal="30dp" android:numColumns="2"/> </RelativeLayout> 

item.xml

<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:padding="40dp"> <TextView android:gravity="center" android:id="@+id/text" android:layout_centerInParent="true" android:layout_width="200dp" android:layout_height="100dp"/> </RelativeLayout> 

MainActivity.java

package com.example.a4_3_3; import android.app.Activity; import android.graphics.Color; import android.os.Bundle; import android.view.View; import android.widget.AdapterView; import android.widget.GridView; import android.widget.Toast; public class MainActivity extends Activity { private GridView gd; private String[] string = { "足球场", "游泳馆", "羽毛球馆", "篮球场", "网球场","奥体用餐中心" }; private int[] color = {Color.parseColor("#C908B1EE"),Color.parseColor("#C9168DFA"), Color.parseColor("#C985ABE2"),Color.parseColor("#C907AB68"), Color.parseColor("#C9DF7808"),Color.parseColor("#C9E45816"),}; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); initData(); gd.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { int po=position+1; switch (position){ case 0: Toast.makeText(MainActivity.this, "Clicked "+po+" !", Toast.LENGTH_SHORT).show(); break; case 1: Toast.makeText(MainActivity.this, "Clicked "+po+" !", Toast.LENGTH_SHORT).show(); break; case 2: Toast.makeText(MainActivity.this, "Clicked "+po+" !", Toast.LENGTH_SHORT).show(); break; case 3: Toast.makeText(MainActivity.this, "Clicked "+po+" !", Toast.LENGTH_SHORT).show(); break; case 4: Toast.makeText(MainActivity.this, "Clicked "+po+" !", Toast.LENGTH_SHORT).show(); break; } } }); } private void initView() { // TODO Auto-generated method stub gd= (GridView) findViewById(R.id.grid); } private void initData() { // TODO Auto-generated method stub gd.setAdapter(new gridadapter(color,string, this)); } } 

gridadapter.java

package com.example.a4_3_3; import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.TextView; public class gridadapter extends BaseAdapter { private int[] colors; private String[] titles; private Context context; private LayoutInflater inflater; public gridadapter(int[] colors,String[] titles, Context context) { super(); this.colors = colors; this.titles = titles; this.context = context; this.inflater = LayoutInflater.from(context); } @Override public int getCount() { // TODO Auto-generated method stub return titles.length; } @Override public Object getItem(int position) { // TODO Auto-generated method stub return titles[position]; } @Override public long getItemId(int position) { // TODO Auto-generated method stub return position; } @Override public View getView(int position, View v, ViewGroup parent) { v = inflater.inflate(R.layout.item, null); v.setBackgroundColor(colors[position]); TextView tv= (TextView) v.findViewById(R.id.text); tv.setText(titles[position]); return v; } } 

写在最后??

了解更多:https://blog.csdn.net/Urchin_dong/article/details/50985079?depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-1&utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-1


上一篇:Android中ListView使用示例介绍下一篇:Android四大组件之Activity详细介绍
程序园_程序员的世界 Copyright © 2020- www.580doc.com. Some Rights Reserved.