前言
在上一节,我们学习了ListView
的使用,这节让我们来学习下网格布局GridView
.
今天涉及内容:
- GridView属性
- GridView在MainActivity中使用
- 效果图和项目结构图
- 适配器GridAdapter源码
先来波效果图

一.GridView属性
GridView
作为一个网格视图控件,具有以下基本属性:
- android:columnWidth://设置列的宽度
- android:gravity:组件对其方式
- android:horizontalSpacing:水平方向每个单元格的间距
- android:verticalSpacing:垂直方向每个单元格的间距
- android:numColumns:设置列数
- android:stretchMode:设置拉伸模式,可选值如下:
none:不拉伸;
spacingWidth:拉伸元素间的间隔空隙
columnWidth:仅仅拉伸表格元素自身
spacingWidthUniform:既拉元素间距又拉伸他们之间的间隔空隙
二.GridView在MainActivity中使用
先在MainActivity
对应布局activity_main.xml
中添加GridView
控件,类似如下:
<GridView
android:id="@+id/mGridView"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/mBtnTest"/>
然后给出GridView
在MainActivity
中使用代码:
open class MainActivity : AppCompatActivity(), View.OnClickListener {
private var nameList:MutableList<String> = mutableListOf("幼稚园","小学","初中","高中","大学")
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
initData()
setListener()
}
private fun initData() {
var count:Int=4 //一行网格个数
//ListView设置适配器
mGridView.numColumns=count //一行显示的网格个数
mGridView.verticalSpacing=10 //单个网格上下间距
mGridView.horizontalSpacing=3 //单个网格左右间距
//初始化适配器
var adapter:GridAdapter<String> = GridAdapter(nameList,this,count)
mGridView.adapter=adapter //设置适配器
//item点击事件
mGridView.setOnItemClickListener(object:AdapterView.OnItemClickListener{
override fun onItemClick(
parent: AdapterView<*>?,
view: View?,
position: Int,
id: Long
) {
toast("点击了第${position}项,值为${nameList[position]}")
}
})
}
private fun setListener() {
mBtnTest.setOnClickListener(this@MainActivity)
}
override fun onClick(v: View) {
when(v.id){
R.id.mBtnTest -> {
}
}
}
}
三.效果图和项目结构图


四.适配器GridAdapter源码
在适配器GridAdapter
代码中,我们着重要注意以下两点:
- 如何实现
itemView
的宽高一致 - MyViewHolder的优化写法
下面给出GridAdapter
源码:
网友评论