基础使用
1.布局文件
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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">
<GridView
android:id="@+id/grid_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scrollbars="none"
android:numColumns="4"
android:verticalSpacing="10dp" />
</androidx.constraintlayout.widget.ConstraintLayout>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:paddingVertical="6dp">
<ImageView
android:id="@+id/iv_person_avatar"
android:layout_width="50dp"
android:layout_height="50dp"
android:scaleType="fitXY"
android:src="@drawable/big_img" />
<TextView
android:id="@+id/tv_person_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
tools:text="12345"
android:layout_marginTop="5dp" />
</LinearLayout>
2.实体类
public class Person {
private String name;
private int imageId;
public Person(String name, int imageId) {
this.name = name;
this.imageId = imageId;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getImageId() {
return imageId;
}
public void setImageId(int imageId) {
this.imageId = imageId;
}
}
- Adapter和调用
class GridViewActivity : AppCompatActivity() {
private lateinit var gridView: GridView
private var mData = mutableListOf<Person>()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_gridview)
gridView = findViewById(R.id.grid_view)
for (i in 1..20){
mData.add(Person("张三",R.drawable.smail))
mData.add(Person("李四",R.drawable.code_coach))
mData.add(Person("王五",R.mipmap.ic_launcher))
}
val adapter = PersonAdapter(this,mData)
gridView.adapter = adapter
}
//适配器
inner class PersonAdapter(context: Context, data: List<Person>)
: ArrayAdapter<Person>( context, R.layout.layout_gridview_item1, data
) {
@SuppressLint("SetTextI18n")
override fun getView(position: Int, convertView: View?, parent: ViewGroup): View {
var v = convertView
if (v == null) {
v = View.inflate(context, R.layout.layout_gridview_item1, null)
val holder = ViewHolder()
holder.ivPersonAvatar = v.findViewById<View>(R.id.iv_person_avatar) as ImageView
holder.tvPersonName = v.findViewById<View>(R.id.tv_person_name) as TextView
v.tag = holder
}
val data = getItem(position)
val holder = v?.tag as ViewHolder
holder.let {
data?.imageId?.let { it1 -> it.ivPersonAvatar.setImageResource(it1) }
it.tvPersonName.text = data?.name
}
return v
}
inner class ViewHolder {
lateinit var ivPersonAvatar: ImageView
lateinit var tvPersonName: TextView
}
}
}
效果图:
常用属性
android:numColumns="auto_fit" ---------列数设置为自动
android:columnWidth="90dp",----------每列的宽度,也就是Item的宽度
android:stretchMode="columnWidth"------缩放与列宽大小同步
android:verticalSpacing="10dp"-----------垂直边距
android:horizontalSpacing="10dp"---------水平边距
说一下 “android:stretchMode” 属性,设置水平间距,不设置时,默认是columnWidth。
(1)stretchMode设为none
(2)stretchMode设为spacingWidth,剩余的空间用来填空间隙(顶行开始显示item,最边上没有间隙)
(3)stretchMode设为spacingWidthUniform,剩余的空间用来填空间隙(所有的item居中显示,就是最边上也会有间隙)
(4)stretchMode设为columnWidth,剩余的间隙用item的宽度去填充,就是item的宽度自动缩放