HarmonyOS开发实战:小分享-TemplateSelectPage模板选择——分类Tab+Grid网格
前言欢迎加入开源鸿蒙跨平台社区https://openharmonycrossplatform.csdn.net模板选择页让用户从丰富的模板库中选择喜欢的样式支持分类筛选和网格预览。小分享 App 的 TemplateSelectPage 使用Grid 组件实现三列网格布局通过Tab 分类切换筛选模板。本篇讲解 Grid 网格布局、Tab 下划线、State 选中态等核心实现。详细 API 可参考 HarmonyOS Grid 官方文档。一、TemplateSelectPage 完整代码1.1 页面完整实现import router from ohos.router; import { TemplateItem } from ../common/interfaces; Entry Component struct TemplateSelectPage { State selectedCategory: number 0; private categories: string[] [热门, 文艺, 简约, 古风, 节日]; private templates: ArrayTemplateItem [ { title: 水墨古风, style: 古风 }, { title: 简约现代, style: 简约 }, { title: 文艺清新, style: 文艺 }, { title: 节日喜庆, style: 节日 }, { title: 古典雅致, style: 古风 }, { title: 极简黑白, style: 简约 } ]; build() { Column() { this.HeaderBar() this.CategoryTabs() this.TemplateGrid() } .width(100%).height(100%).backgroundColor(#F5F5F5) } }1.2 Header 导航栏Row() { Text(‹).fontSize(24).fontColor(#1A1A1A).onClick(() { router.back() }) Text(选择模板).fontSize(18).fontWeight(FontWeight.Bold).fontColor(#1A1A1A).layoutWeight(1).textAlign(TextAlign.Center) Text().fontSize(20).fontColor(#999999).onClick(() { router.back() }) } .width(100%).padding({ left: 16, right: 16, top: 12, bottom: 12 }).backgroundColor(Color.White)二、分类 Tab 实现2.1 Tab 数据private categories: string[] [热门, 文艺, 简约, 古风, 节日];2.2 Tab 选中下划线.border({ width: { bottom: 2 }, color: { bottom: this.selectedCategory index ? #F5A623 : Color.Transparent } })2.3 Tab 选中态对比状态文字颜色下划线颜色字重选中#F5A623#F5A623Bold未选中#666666透明Normal三、Grid 网格布局3.1 基本结构Grid() { ForEach(this.templates, (item: TemplateItem, index: number) { GridItem() { this.TemplateCard(item, index) } }, (item: TemplateItem, index: number) ${item.title}_${index}) } .columnsTemplate(1fr 1fr 1fr) .rowsGap(0) .layoutWeight(1) .padding({ top: 8 })3.2 columnsTemplate 语法模板说明示例1fr 1fr 1fr三列等分通用1fr 2fr 1fr中列宽两侧窄特殊布局repeat(3, 1fr)三列等分通用100px 1fr 1fr第一列固定其余等分侧边栏四、模板卡片设计4.1 卡片结构Column() { Column() { Text().fontSize(40) } .width(100%).height(140) .backgroundColor(index % 2 0 ? #FFF8F0 : #F0F8FF) .borderRadius({ topLeft: 12, topRight: 12 }) Text(item.title).fontSize(13).fontColor(#333333) .width(100%).padding({ left: 8, top: 8, bottom: 8 }).textAlign(TextAlign.Center) } .width(100%).backgroundColor(Color.White).borderRadius(12) .shadow({ radius: 2, color: #08000000, offsetY: 1 }).margin(8)4.2 卡片样式参数元素属性值说明预览区高度140px模板预览缩略图预览区背景色#FFF8F0/#F0F8FF交替色预览区圆角topLeft/topRight 12仅顶部圆角标题字号13px模板名称标题颜色#333333深灰色卡片阴影radius 2, offsetY 1轻阴影五、State 状态管理5.1 选中分类State selectedCategory: number 0; .onClick(() { this.selectedCategory index })六、页面布局结构Column (主容器背景 #F5F5F5) ├─ Row (Header 导航栏白色背景) │ ├─ Text(‹) 返回 │ ├─ Text(选择模板) 标题 │ └─ Text() 关闭 ├─ Row (分类 Tab 栏白色背景) │ ├─ Text(热门) - 选中时 #F5A623, 下划线 │ ├─ Text(文艺) │ ├─ Text(简约) │ ├─ Text(古风) │ └─ Text(节日) └─ Grid (模板网格) - columnsTemplate(1fr 1fr 1fr) ├─ GridItem (模板卡片 1) - 交替背景色 │ ├─ Column (预览图) 140px 高度 │ └─ Text(标题) 13px ├─ GridItem (模板卡片 2) └─ GridItem (模板卡片 3) - 每行 3 个七、模板数据模型7.1 TemplateItem 接口export interface TemplateItem { title: string; // 模板名称 style: string; // 风格分类 }八、完整代码文件索引文件路径说明pages/TemplateSelectPage.ets模板选择页面common/interfaces.etsTemplateItem 接口定义九、本文涉及的所有 APIAPI/组件用途文档链接Grid网格布局GridGridItem网格项GridItemState状态管理State Guideborder()边框样式Bordershadow()阴影ShadowborderRadius()圆角BorderRadiusrouter.pushUrl()路由跳转RouterForEach循环渲染ForEach十、实现要点总结10.1 技术要点模板选择页的核心实现要点分类 Tab使用border条件渲染实现选中下划线Grid 网格columnsTemplate(1fr 1fr 1fr)三列等分模板卡片交替背景色、局部圆角、轻阴影State 管理selectedCategory控制分类选中态路由跳转点击卡片跳转到TemplateDetailPage10.2 实战建议分类 Tab 使用border的bottom方向实现下划线Grid 的columnsTemplate使用1fr等分列宽模板卡片使用margin(8)保持间距局部圆角使用borderRadius({topLeft, topRight})总结本文详细讲解了 TemplateSelectPage 模板选择页的完整实现。核心知识点包括分类 Tab 切换border 下划线实现选中态、Grid 网格布局columnsTemplate(1fr 1fr 1fr)三列等分、模板卡片设计交替背景色、局部圆角、轻阴影效果、State 状态管理selectedCategory控制分类选中态。这些技术构成了完整的模板选择页面。下一篇我们将深入 TemplateDetailPage 模板详情页的实现。TemplateDetailPage 模板详情页相关资源HarmonyOS Grid 官方文档Grid ReferenceHarmonyOS GridItem 组件GridItem ReferenceHarmonyOS border 属性Border AttributeHarmonyOS State 装饰器State GuideHarmonyOS Router 路由Router APIHarmonyOS ForEach 渲染ForEach ReferenceHarmonyOS 阴影属性Shadow Attribute开源鸿蒙跨平台社区https://openharmonycrossplatform.csdn.netSharePreviewPage 分享预览页TemplateDetailPage 模板详情页如果这篇文章对你有帮助欢迎点赞、收藏⭐、关注你的支持是我持续创作的动力

相关新闻

病理图片处理代码HistoQC使用记录

病理图片处理代码HistoQC使用记录

HistoQC源代码地址:https://github.com/choosehappy/HistoQC 2026.7.23更新 官网更新了代码,官网给了一套安装教程,不过如果按照官网的安装教程会有各种各样的问题!!!特来更新。docker没有尝试&#xff0…

2026/7/24 20:40:38阅读更多 →
【Rust中级教程】1.1. 指针概览(上):什么是指针、指针和引用的区别

【Rust中级教程】1.1. 指针概览(上):什么是指针、指针和引用的区别

1.1 指针概览(上):什么是指针、指针和引用的区别 1.1.1. 什么是指针 指针是计算机引用无法立即直接访问的数据的一种方式。 一个非常形象的类比就是书的目录,目录相当于指针,目录里面存的是对应内容所在的页码;在计算机中&…

2026/7/24 20:40:38阅读更多 →
Day 02 · 环境搭建:一套装备打天下

Day 02 · 环境搭建:一套装备打天下

AI Python 系列」第 01 栏 AI 时代的 Python 办公自动化 全栏 20 篇 零成本跟完 🍃 品牌:梅雅达编程笔记 开篇 你是不是也卡在这一步 Day 01 说了,AI 办公自动化能帮你省钱省时间。很多读者看完热血沸腾——然后打开电脑,对…

2026/7/24 20:40:38阅读更多 →
AI内容粘贴后符号丢失怎么办?用AI导出鸭一键修复格式错乱问题

AI内容粘贴后符号丢失怎么办?用AI导出鸭一键修复格式错乱问题

1:AI内容粘贴后符号丢失怎么办?用AI导出鸭一键修复格式错乱问题 2:AI内容粘贴后符号丢失怎么办?AI导出鸭帮你解决Word导出难题 3:AI内容粘贴后符号丢失怎么办?AI导出鸭三种方式轻松搞定格式问题AI内容粘贴后…

2026/7/24 22:04:52阅读更多 →
FigmaCN终极指南:3分钟让Figma界面全中文化,设计师效率提升50%

FigmaCN终极指南:3分钟让Figma界面全中文化,设计师效率提升50%

FigmaCN终极指南:3分钟让Figma界面全中文化,设计师效率提升50% 【免费下载链接】figmaCN 中文 Figma 插件,设计师人工翻译校验 项目地址: https://gitcode.com/gh_mirrors/fi/figmaCN 还在为Figma的全英文界面而头疼吗?菜单…

2026/7/24 22:04:52阅读更多 →
鸿蒙 PC Markdown 编辑器桌面工作台:ArkUI 自由窗口布局与状态设计

鸿蒙 PC Markdown 编辑器桌面工作台:ArkUI 自由窗口布局与状态设计

鸿蒙 PC Markdown 编辑器桌面工作台:ArkUI 自由窗口布局与状态设计 本文聚焦鸿蒙 PC 自由窗口、桌面信息密度、ArkUI 与 ArkWeb 状态边界,以及键鼠、触控板和触控共同存在时的交互约束。完整示例代码:https://gitcode.com/VON-/codex_md_oh。…

2026/7/24 22:04:52阅读更多 →
天线原理-1.引论

天线原理-1.引论

天线的概念 天线是辐射或接受电磁波的装置 天线 antenna 触须 天线 aerial 空中的线 天线是如何发明的 麦克斯韦提出电磁场方程组,预示电磁波的存在1886年,赫兹采用电火花间隙发射机和环形天线,验证了电磁波的存在。1895年,马可…

2026/7/24 22:04:52阅读更多 →
langchain1.X学习笔记-2-开发前的准备工作

langchain1.X学习笔记-2-开发前的准备工作

文章目录1 前置知识1.1 Python基础语法1.2 大语言模型基础2 相关环境的安装2.1 代码管理方案2.2 虚拟环境的设置方案2.2.1 方案1-conda:适合Python非Python依赖的复杂环境2.2.2 方案2-uv:适合纯Python项目的现代包管理2.2.3 方案3-venv:Pytho…

2026/7/24 22:04:52阅读更多 →
DP83TC811R-Q1以太网PHY芯片RGMII与SMI接口配置实战指南

DP83TC811R-Q1以太网PHY芯片RGMII与SMI接口配置实战指南

1. 项目概述与核心价值在嵌入式网络设备开发中,选对一颗PHY芯片只是第一步,真正让它在你的板子上“活”起来,跑得稳,才是工程师价值的体现。我最近在几个车载网关和工业控制器的项目里,都深度使用了德州仪器的DP83TC81…

2026/7/24 22:02:52阅读更多 →
Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/24 0:58:53阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/24 0:58:53阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/24 0:58:53阅读更多 →
我的编程之路:第一篇博客

我的编程之路:第一篇博客

大家好,我是一名编程初学者,同时这也是我编程学习之路上的第一篇博客。在这里,我想要向大家介绍我的一些想法和规划。a.自我介绍我是一个刚刚接触编程的新手,目前在学习c语言,我对编程世界充满了强烈的好奇。当然&…

2026/7/24 0:00:06阅读更多 →
【LeetCode 54】螺旋矩阵

【LeetCode 54】螺旋矩阵

问题描述: 解法: 1、模拟(参考自【LeetCode 54】螺旋矩阵-CSDN博客) int *spiralOrder(int **matrix, int matrixSize, int *matrixColSize, int *returnSize) {static const int dirs[4][2] {{0, 1}, {1, 0}, {0, -1}, {-1, …

2026/7/24 0:00:06阅读更多 →
2026 WAIC:模型隐身、智能体疯野,厂商竞赛聚焦办公场景与商业闭环

2026 WAIC:模型隐身、智能体疯野,厂商竞赛聚焦办公场景与商业闭环

知春路不相信模型领先今年WAIC大会,昔日AI六小龙来了五家,分别是Kimi、阶跃星辰、Minimax、百川智能、零一万物。连放弃基模的百川和零一万物都来了,唯一缺席的竟是近几个月来风光无限的智谱。(DeepSeek一直不参加)WAI…

2026/7/24 0:00:06阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/23 22:58:43阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/24 19:00:40阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/24 19:00:40阅读更多 →