You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android中如何创建网格布局?新手开发者技术咨询

嘿,作为Android开发新手,搞懂网格布局其实没那么难!我给你两种最常用的实现方式,都是项目里高频用到的,一步步来:

方法一:用 RecyclerView + GridLayoutManager(推荐,适合大多数场景)

这个方案适合需要滚动、加载大量数据的网格布局,扩展性极强,后续加下拉刷新、加载更多都很方便。

步骤1:添加RecyclerView依赖

首先确保你的app模块build.gradle(或build.gradle.kts)里有RecyclerView的依赖:

dependencies {
    implementation 'androidx.recyclerview:recyclerview:1.3.2'
}

同步项目让依赖生效就行。

步骤2:创建单个网格项的布局

新建item_grid.xml,自定义每个网格里的内容(比如图片+文字):

<?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="wrap_content"
    android:orientation="vertical"
    android:padding="8dp">

    <ImageView
        android:id="@+id/grid_item_image"
        android:layout_width="match_parent"
        android:layout_height="120dp"
        android:scaleType="centerCrop"
        android:src="@drawable/ic_launcher_background"/>

    <TextView
        android:id="@+id/grid_item_text"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="8dp"
        android:textSize="14sp"
        android:text="示例文本"/>
</LinearLayout>

步骤3:写RecyclerView的Adapter

这个类负责把数据绑定到每个网格项上,新建GridItemAdapter.kt(Java开发者改成.java即可):

class GridItemAdapter(private val itemList: List<String>) : RecyclerView.Adapter<GridItemAdapter.ViewHolder>() {

    inner class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
        val itemImage: ImageView = itemView.findViewById(R.id.grid_item_image)
        val itemText: TextView = itemView.findViewById(R.id.grid_item_text)
    }

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
        val view = LayoutInflater.from(parent.context).inflate(R.layout.item_grid, parent, false)
        return ViewHolder(view)
    }

    override fun onBindViewHolder(holder: ViewHolder, position: Int) {
        val item = itemList[position]
        holder.itemText.text = item
        // 如果要加载网络图,后续可以集成Glide/Picasso,这里先用本地占位图
    }

    override fun getItemCount(): Int {
        return itemList.size
    }
}

步骤4:在Activity/Fragment中配置RecyclerView

先在activity_main.xml里添加RecyclerView:

<androidx.recyclerview.widget.RecyclerView
    android:id="@+id/grid_recycler_view"
    android:layout_width="match_parent"
    android:layout_height="match_parent"/>

然后在MainActivity里设置布局管理器和Adapter:

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val recyclerView = findViewById<RecyclerView>(R.id.grid_recycler_view)
        // 设置为2列的垂直网格,数字改成你想要的列数就行
        recyclerView.layoutManager = GridLayoutManager(this, 2)
        // 模拟测试数据
        val itemList = listOf("Item 1", "Item 2", "Item 3", "Item 4", "Item 5", "Item 6")
        recyclerView.adapter = GridItemAdapter(itemList)
    }
}

如果想实现自适应列数(比如根据屏幕宽度自动调整),可以自己计算列数:

// 先写个dp转px的扩展方法
fun Int.dpToPx(): Int {
    return (this * Resources.getSystem().displayMetrics.density).toInt()
}

// 计算列数
val screenWidth = resources.displayMetrics.widthPixels
val columnWidth = 150.dpToPx() // 每个网格项的宽度
val columnCount = screenWidth / columnWidth
recyclerView.layoutManager = GridLayoutManager(this, columnCount)
方法二:用GridLayout(适合固定数量的小型布局)

如果你的网格内容不多、不需要滚动,用GridLayout更简单,直接在布局里写就行:

<GridLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:columnCount="2"
    android:rowCount="3">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_margin="8dp"
        android:text="Item 1"
        android:textSize="16sp"/>

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_margin="8dp"
        android:text="Item 2"
        android:textSize="16sp"/>

    <!-- 继续添加其他项,GridLayout会自动按行列排列 -->
</GridLayout>

要是想让每个网格项大小一致,可以用权重设置:

<TextView
    android:layout_width="0dp"
    android:layout_height="0dp"
    android:layout_columnWeight="1"
    android:layout_rowWeight="1"
    android:layout_margin="8dp"
    android:gravity="center"
    android:text="Item 1"
    android:textSize="16sp"/>

另外,如果需要不规则的瀑布流网格,直接把GridLayoutManager换成StaggeredGridLayoutManager就行,用法差不多,传列数和排列方向就OK。

内容的提问来源于stack exchange,提问作者Adyasha

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 04:12:38