安卓实现网格布局的效果

news2025/7/16 3:05:03

文章目录

  • 页面
    • 子项布局
  • Activity
    • 适配器
  • 运行结果
  • 其他文章

页面

RecyclerView是Android开发中常用的列表控件之一,可以用于展示大量数据以及实现各种布局效果。本文章使用RecyclerView的GridLayoutManager来实现网格布局,显示指定列数。
首先,在你的布局文件中添加一个RecyclerView:

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

子项布局

创建一个布局文件作为子项的布局,命名为item_layout,使用的根节点是LinearLayout。
在这里插入图片描述
布局代码示例如下:

<?xml version="1.0" encoding="utf-8"?>
<!-- item_layout.xml -->
<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="16dp">

    <TextView
        android:id="@+id/itemTextView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="8dp"
        android:textSize="16sp" />

</LinearLayout>

设置android:orientation="vertical"来垂直排列布局中的子组件。布局中包含一个TextView用于展示项的文本信息。
当然了,你可以根据实际需求自定义布局,添加和调整组件的样式、位置和属性。

Activity

然后在Activity或Fragment中获取RecyclerView的实例,并设置LayoutManager为GridLayoutManager。

val recyclerView: RecyclerView = findViewById(R.id.recyclerView)

// 设置GridLayoutManager,指定列数
// 第二个参数用于设置列数,这里是2列
val layoutManager = GridLayoutManager(this, 2)
recyclerView.layoutManager = layoutManager

通过上述代码,我们创建了一个GridLayoutManager实例,并指定了列数为2。然后,将该实例设置给RecyclerView的LayoutManager属性,以实现网格布局的效果。

// 创建数据源
val data = mutableListOf<String>()
data.add("Item 1")
data.add("Item 2")
data.add("Item 3")
data.add("Item 1")
data.add("Item 2")
data.add("Item 3")
data.add("Item 1")
data.add("Item 2")
data.add("Item 3")

// 创建适配器
val adapter = MyAdapter(data)
recyclerView.adapter = adapter

在上述代码中,我们创建了一个字符串列表作为数据源,并添加了几个示例项。接着,创建了一个自定义的适配器类MyAdapter,并将数据源传入适配器的构造函数中。最后,将适配器设置给RecyclerView的Adapter属性,以显示数据。

适配器

然后,创建和设置适配器来展示网格布局中的数据,创建一个类,命名为MyAdapter,来当我们的适配器,代码如下所示。

import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.TextView
import androidx.recyclerview.widget.RecyclerView

class MyAdapter(private val dataList: List<String>) : RecyclerView.Adapter<MyAdapter.ViewHolder>() {

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

    override fun onBindViewHolder(holder: ViewHolder, position: Int) {
        val data = dataList[position]
        holder.bindData(data)
    }

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

    inner class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {

        fun bindData(data: String) {
            // 在这里设置布局中的数据展示逻辑
            val itemTextView: TextView = itemView.findViewById(R.id.itemTextView)
            itemTextView.text = data
        }
    }
}

在上述代码中,我们创建了一个名为MyAdapter的适配器类,并继承自RecyclerView.Adapter。适配器需要传入一个数据源dataList,这里是一个字符串列表。
在onCreateViewHolder方法中,我们通过加载布局文件item_layout来创建ViewHolder实例,并返回该实例。item_layout是一个用于展示单个项的布局文件,也就是我们在上一节里写的那个子项的布局文件。
在onBindViewHolder方法中,我们根据对应位置的数据,将数据绑定到ViewHolder中。这里只是简单地将数据设置到一个TextView组件中,你可以根据你具体的布局文件和数据来绑定。
在getItemCount方法中,我们返回数据源的大小,即要展示的项的数量。

最后,内部类ViewHolder是每个项的视图持有者,在ViewHolder中可以绑定数据和设置点击事件。

这样我们的网格布局就做好了。

运行结果

最后我们运行结果,效果如下图所示。
在这里插入图片描述

其他文章

安卓获取当前设备的局域网IP地址
安卓监听端口接收消息

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1036058.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

25. 图论 - 路径和算法

文章目录 拓展:顶点和边的互换最短路径问题Dijkstra算法Hi, 你好。我是茶桁。 在充分了解图的概念,构成以及种类之后,我们要开始进入稍微有点难度的部分了。这节课,咱们来了解一下路径和Dijkstra算法。 拓展:顶点和边的互换 在这节课正式开始之前,我们对上一节课稍微扩…

Java笔记:认识运行时数据区

1. 运行时数据区概述 1.1 JVM运行时数据区规范 JVM虚拟机组成&#xff1a;方法区(类信息)、堆(伊甸园、老年代、永久代:new的对象等)、虚拟机栈、程序计数器、本地方法栈1.方法区和堆是内存共享的 2.虚拟机栈、本地方法栈、程序计数器是内存不共享的3.方法区&#xff1a;类信息…

描述符——接口描述符

描述符定义 描述符实现 /*** brief USB interface descriptor.*/ typedef struct __attribute__ ((packed)) {uint8_t bLength ; /**< Size of this descriptor in bytes. */uint8_t bDescriptorType ; /**< INTERFACE Descriptor Type. */uint8_t bIn…

MySQL数据库——索引(3)-索引语法(创建索引、查看索引、删除索引、案例演示),SQL性能分析(SQL执行频率,慢查询日志)

目录 索引语法 创建索引 查看索引 删除索引 案例演示 SQL性能分析 SQL执行频率 慢查询日志 索引语法 创建索引 CREATE [ UNIQUE | FULLTEXT ] INDEX index_name ON table_name (index_col_name,... ) ; 查看索引 SHOW INDEX FROM table_name ; 删除索引 DROP INDEX …

AD拼板技巧

AD拼板设置 如图&#xff0c;有一个需要拼板的PCB&#xff0c;想要在生产是拼接生产&#xff0c;节省材料。 操作如下&#xff1a; 1、全选如下&#xff0c;按复制CtrlC。 2、把输入法调整至英文&#xff0c;按快捷键E&#xff08;先&#xff09;&#xff0c; A&#xff08;后…

开发工具MobaXterm(终极终端)

MobaXterm 又名 MobaXVT&#xff0c;是一款增强型终端、X 服务器和 Unix 命令集(GNU/ Cygwin)工具箱。 常用SSH客户端介绍&#xff1a; SSH 为 Secure Shell 的缩写&#xff0c;是目前较可靠&#xff0c;专为远程登录会话和其他网络服务提供安全性的协议。利用 SSH 协议可以有…

【1993. 树上的操作】

来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 描述&#xff1a; 给你一棵 n 个节点的树&#xff0c;编号从 0 到 n - 1 &#xff0c;以父节点数组 parent 的形式给出&#xff0c;其中 parent[i] 是第 i 个节点的父节点。树的根节点为 0 号节点&#xff0c;所以 par…

C++中的Template

模板的概念 建立通用的模具&#xff0c;大大提高复用性 模板不可直接使用 函数模板 函数模板语法 函数模板作用&#xff1a; 建立一个通用函数&#xff0c;其函数返回值类型和形参类型可以不具体制定&#xff0c;用一个虚拟的类型来代表。 语法&#xff1a; template&l…

小程序社区团购demo

概述 实现了用户登录或者手机号&#xff0c;加入团长&#xff0c;邀请团长&#xff0c;各种佣金明细等页面 详细 需求&#xff1a; 根据市场信息反馈&#xff0c;社区团购比较火&#xff0c;有流量的用户可以推广页面 实现了功能&#xff1a; 实现了用户微信登录自动获取…

vue之 h() 函数

前言 Vue推荐在绝大数情况下使用模板来创建HTML&#xff0c;然后一些特殊的场景&#xff0c;你真的需要JavaScript的完全编程的能力&#xff0c;这个时候你可以使用渲染函数 &#xff0c;它比模板更接近编译器&#xff1b; h()函数是什么 Vue在生成真实的DOM之前&#xff0c…

如何用好免费的ChatGPT

如何用好免费的ChatGPT 前言ChatGPT使用入口在线体验地址&#xff1a;点我体验 ChatGPT介绍ChatGPT初级使用技巧初级使用技巧&#xff1a;清晰明了的问题表达 ChatGPT中级使用语法中级使用语法&#xff1a;具体化问题并提供背景信息 ChatGPT高级使用高级使用&#xff1a;追问、…

Vue中如何进行表格排序与过滤

Vue中如何进行表格排序与过滤 在Vue.js中&#xff0c;表格是一个常见的数据展示方式。很多时候&#xff0c;我们需要对表格中的数据进行排序和过滤&#xff0c;以提供更好的用户体验。本文将介绍如何在Vue中实现表格的排序和过滤功能&#xff0c;并提供相关的代码示例。 准备工…

WebSocket通信安全概览

文章前言 在一次做项目的时候本来是想去点击Burpsuite的Proxy界面的HTTP History选项卡来查看HTTP历史请求记录信息并做测试的&#xff0c;但是在查看的时候却下意识的点击到了HTTP Proxy右侧的"WebSockets History"选项卡中&#xff0c;从界面的交互历史中发现网站…

2023华为杯数模C题——大规模创新类竞赛评审方案研究

B题——大规模创新类竞赛评审方案研究 思路&#xff1a;采用数据分析等手段改进评分算法性能 完成情况(1-2问已经完成) 代码下载 问题一 在每个评审阶段&#xff0c;作品通常都是随机分发的&#xff0c;每份作品需要多位评委独立评审。为了增加不同评审专家所给成绩之间的可比…

c语言代码

目录 1.利用goto的关机程序 2.交换两个整数&#xff08;容易出现的错误&#xff09; 2.1 错误示范 2.1.1 错误的原因 3.函数调用进行折半查找 3.1错误版本 3.1.1错误原因 4.写一个函数&#xff0c;每调用一次这个函数&#xff0c;就会将num的值增加1。 4.1使用传值进去 5.有关p…

【初阶数据结构】二叉树全面知识总结

二叉树详解 树的概念及其结构树的概念树的相关概念树的表示方法孩纸兄弟表示法双亲表示法&#xff08;并查集&#xff09; 树的实际应用 二叉树二叉树的概念二叉树的种类二叉树的性质二叉树的存储结构 二叉树顺序结构的实现堆的概念及结构堆向上、向下调整法堆的插入堆的删除堆…

基于ENC28J60+uIP1.0+STM32的UDP Server实现,服务器主动发送数据的实现,几个关键的问题可算整明白了!

ENC28J60&#xff0c;是一款SPI接口的以太网PHYMAC芯片&#xff0c;实现以太网物理层和MAC层硬件通信。uIP是一个TCP/IP软件协议栈&#xff0c;实现TCP、UDP、ARP、ICMP等网络协议。STM32F103RCT6通过SPI接口与ENC28J60通讯&#xff0c;并移植uIP协议&#xff0c;实现一个小型的…

20230224_HDR-ISP_环境配置

https://github.com/JokerEyeAdas/HDR-ISP/tree/main 一、环境配置 *.VS2015编译不过&#xff1b;VS2017没问题 *.将红框部分复制到工程下面 *.添加头文件路径 *.添加原文件

【C#】Redis在net core下使用教程

系列文章 文章目录 系列文章前言一、Redis 简介1.1 Redis 优势1.2 Redis与其他key-value存储有什么不同&#xff1f; 二、Redis安装步骤2.1 下载链接2.2 安装测试 三、Redis修改帐户密码四、Redis写成Windows服务五、.net core - 使用CSRedisCore操作redis 前言 官方教程&…

【C语言】模拟实现内存函数

本篇文章目录 相关文章1. 模拟 memcpy 内存拷贝2. 模拟 memmove 内存移动 相关文章 【C语言】数据在内存中是以什么顺序存储的&#xff1f;【C语言】整数在内存中如何存储&#xff1f;又是如何进行计算使用的&#xff1f;【C语言】利用void*进行泛型编程【C语言】4.指针类型部…