HarmonyOS开发实战:小分享-SettingsPage设置页——分组列表与退出按钮 前言设置页是用户管理 App 偏好和查看信息的核心页面通常采用分组列表形式。小分享 App 的 SettingsPage 使用嵌套 ForEach 渲染二维数组模拟分组效果。本篇讲解分组列表、嵌套 ForEach、退出按钮等。详细 API 可参考 HarmonyOS ForEach 官方文档。一、SettingsPage 完整代码import router from ohos.router; import { SettingsItem } from ../common/interfaces; Entry Component struct SettingsPage { private settingsItems: ArrayArraySettingsItem [ [ { icon: , label: 账号与安全, page: }, { icon: , label: 隐私设置, page: }, { icon: , label: 通知设置, page: }, { icon: , label: 通用设置, page: } ], [ { icon: , label: 清除缓存, value: 32.4MB, page: }, { icon: , label: 版本更新, value: V1.2.0, page: } ] ]; build() { Column() { Row() { Text(‹).fontSize(24).fontColor(#1A1A1A).onClick(() { router.back() }) Text(设置).fontSize(18).fontWeight(FontWeight.Bold).fontColor(#1A1A1A).layoutWeight(1).textAlign(TextAlign.Center) Blank() } .width(100%).padding({ left: 16, right: 16, top: 12, bottom: 12 }).backgroundColor(Color.White) Scroll() { Column({ space: 16 }) { ForEach(this.settingsItems, (group: ArraySettingsItem, groupIndex: number) { Column({ space: 0 }) { ForEach(group, (item: SettingsItem, index: number) { Row({ space: 12 }) { Text(item.icon).fontSize(20) Text(item.label).fontSize(15).fontColor(#1A1A1A).layoutWeight(1) if (item.value) { Text(item.value).fontSize(13).fontColor(#999999) } Text(›).fontSize(18).fontColor(#CCCCCC) } .width(100%).padding({ left: 16, right: 16, top: 16, bottom: 16 }).backgroundColor(Color.White) .onClick(() { if (item.page) { router.pushUrl({ url: item.page }) } }) if (index group.length - 1) { Divider().color(#F5F5F5).strokeWidth(0.5) } }, (item: SettingsItem, index: number) item.label) } .width(100%).borderRadius(12) }, (group: ArraySettingsItem, groupIndex: number) group_${groupIndex}) Button(退出登录).fontSize(16).fontColor(#F44336) .backgroundColor(Color.Transparent).width(100%).height(48).borderRadius(12).margin({ top: 20 }) } .width(100%).padding({ left: 16, right: 16, bottom: 20 }) } .layoutWeight(1) } .width(100%).height(100%).backgroundColor(#F5F5F5) } }二、二维数组分组private settingsItems: ArrayArraySettingsItem [ [ { icon: , label: 账号与安全, page: }, { icon: , label: 隐私设置, page: }, { icon: , label: 通知设置, page: }, { icon: , label: 通用设置, page: } ], [ { icon: , label: 清除缓存, value: 32.4MB, page: }, { icon: , label: 版本更新, value: V1.2.0, page: } ] ];三、嵌套 ForEach 渲染ForEach(this.settingsItems, (group: ArraySettingsItem, groupIndex: number) { Column({ space: 0 }) { ForEach(group, (item: SettingsItem, index: number) { // 设置项 if (index group.length - 1) { Divider().color(#F5F5F5).strokeWidth(0.5) } }, (item: SettingsItem, index: number) item.label) } .width(100%).borderRadius(12) }, (group: ArraySettingsItem, groupIndex: number) group_${groupIndex})四、退出按钮Button(退出登录).fontSize(16).fontColor(#F44336) .backgroundColor(Color.Transparent).width(100%).height(48).borderRadius(12).margin({ top: 20 })五、本文核心知识点5.1 设置页核心要点二维数组分组管理设置项嵌套 ForEach 渲染分组列表红色退出按钮5.2 实战开发要点分组之间用 Column space: 16 间隔组内用 Divider 分割可选字段 value 用 if 条件渲染附录设置页的完整实现细节1. 完整的页面布局结构Column (主容器背景 #F5F5F5) ├─ Row (Header 导航栏白色背景) │ ├─ Text(‹) 返回 │ ├─ Text(设置) 标题 │ └─ Blank() ├─ Scroll (可滚动内容区) - layoutWeight(1) │ └─ Column (space: 16) │ ├─ Column (设置组 1) - 白色卡片 │ │ ├─ Row (账号与安全) › │ │ ├─ Divider │ │ ├─ Row (隐私设置) › │ │ ├─ Divider │ │ ├─ Row (通知设置) › │ │ ├─ Divider │ │ └─ Row (通用设置) › │ ├─ Column (设置组 2) - 白色卡片 │ │ ├─ Row (清除缓存) 32.4MB › │ │ ├─ Divider │ │ └─ Row (版本更新) V1.2.0 › │ └─ Button (退出登录) - 红色 └─ (无底部导航栏)2. 嵌套 ForEach 的完整实现ForEach(this.settingsItems, (group: ArraySettingsItem, groupIndex: number) { Column({ space: 0 }) { ForEach(group, (item: SettingsItem, index: number) { Row({ space: 12 }) { Text(item.icon).fontSize(20) Text(item.label).fontSize(15).fontColor(#1A1A1A).layoutWeight(1) if (item.value) { Text(item.value).fontSize(13).fontColor(#999999) } Text(›).fontSize(18).fontColor(#CCCCCC) } .width(100%).padding({ left: 16, right: 16, top: 16, bottom: 16 }).backgroundColor(Color.White) .onClick(() { if (item.page) { router.pushUrl({ url: item.page }) } }) if (index group.length - 1) { Divider().color(#F5F5F5).strokeWidth(0.5) } }, (item: SettingsItem, index: number) item.label) } .width(100%).borderRadius(12) }, (group: ArraySettingsItem, groupIndex: number) group_${groupIndex})3. 退出按钮的实现Button(退出登录).fontSize(16).fontColor(#F44336) .backgroundColor(Color.Transparent).width(100%).height(48).borderRadius(12).margin({ top: 20 })4. SettingsItem 数据模型export interface SettingsItem { icon: string; label: string; value?: string; page: string; }5. 完整代码文件索引文件路径说明pages/SettingsPage.ets设置页面common/interfaces.etsSettingsItem 接口6. 本文涉及的所有 APIAPI/组件用途文档链接ForEach嵌套循环ForEachButton退出按钮ButtonDivider分割线DividerScroll可滚动容器Scrollrouter.back()返回RouterBlank()空白填充Blank7. 实现要点总结设置页的核心实现要点二维数组ArrayArraySettingsItem管理分组数据嵌套 ForEach外层遍历组内层遍历设置项条件渲染item.value存在时显示值红色退出按钮#F44336红色透明背景8. 总结本文详细讲解了 SettingsPage 设置页的完整实现涵盖二维数组分组、嵌套 ForEach 渲染、退出按钮等核心功能。相关资源HarmonyOS ForEach 官方文档ForEach ReferenceHarmonyOS Button 组件Button ReferenceHarmonyOS Divider 组件Divider ReferenceHarmonyOS Scroll 组件Scroll ComponentHarmonyOS Router 路由Router APIHarmonyOS Blank 组件Blank ComponentHarmonyOS Row 组件Row Component开源鸿蒙跨平台社区https://openharmonycrossplatform.csdn.net本文涉及的所有 API 索引API类别用途Column布局容器垂直排列子组件Row布局容器水平排列子组件Text基础组件显示文本ForEach渲染控制循环渲染列表State装饰器组件内状态管理Builder装饰器封装可复用 UI 片段router.pushUrl路由页面跳转router.back路由返回上一页总结本文详细讲解了小分享 App 中对应页面的完整实现。核心知识点涵盖布局容器、组件封装、状态管理、路由跳转等关键技术。通过本文的学习读者可以掌握 HarmonyOS ArkUI 声明式开发的核心技能并能够独立实现类似的页面功能。14. 页面功能总结功能模块实现方式核心组件分组列表二维数组 Array嵌套 ForEach设置项SettingsItem 接口Row Text Divider值显示条件渲染 if(item.value)Text 组件退出按钮Button 红色#F4433615. 完整的代码结构SettingsPage ├── Header 导航栏 ├── 设置组 1 (Column) │ ├── 账号与安全 (SettingRow) │ ├── Divider │ ├── 隐私设置 (SettingRow) │ ├── Divider │ ├── 通知设置 (SettingRow) │ ├── Divider │ └── 通用设置 (SettingRow) ├── 设置组 2 (Column) │ ├── 清除缓存 (SettingRow value) │ ├── Divider │ └── 版本更新 (SettingRow value) └── 退出登录 (Button)ProfilePage 个人中心MoreFunctionsPage 更多功能页MoreFunctionsPage 更多功能页ProfilePage 个人中心MoreFunctionsPage 更多功能页如果这篇文章对你有帮助欢迎点赞、收藏⭐、关注你的支持是我持续创作的动力

相关新闻

最新新闻

SerenityOS 命令行选项解析指南:getopt 与 getopt_long 用法、返回值与底层实现

SerenityOS 命令行选项解析指南:getopt 与 getopt_long 用法、返回值与底层实现

SerenityOS 命令行选项解析指南:getopt 与 getopt_long 用法、返回值与底层实现 【免费下载链接】serenity The Serenity Operating System 🐞 项目地址: https://gitcode.com/GitHub_Trending/se/serenity 导读 本文以 getopt(3) 手册 为核心&a…

2026/10/3 16:42:15
轻量服务器还是ECS?大促云服务器选购与避坑实战指南

轻量服务器还是ECS?大促云服务器选购与避坑实战指南

每年大促节点,群里永远有人在问同一个问题:“38元的轻量服务器到底怎么抢?为什么我每次点进去都是已售罄?68元直购和99元的ECS我到底选哪个?”作为一个常年帮团队和自己采购云服务器的老用户,我太清楚这种纠…

2026/10/3 16:42:30
为 AI 代理的 Review 动作编写 Cedar 审批门控策略:review-agent-governance 策略编写实战指南

为 AI 代理的 Review 动作编写 Cedar 审批门控策略:review-agent-governance 策略编写实战指南

为 AI 代理的 Review 动作编写 Cedar 审批门控策略:review-agent-governance 策略编写实战指南 【免费下载链接】agents Multi-harness agentic plugin marketplace for Claude Code, Codex, Cursor, OpenCode, GitHub Copilot, and Google Antigravity 项目地址:…

2026/10/3 16:42:22
PaddleOCR 手写数学公式识别算法 CAN 实战指南:Counting-Aware Network 训练、评估与推理部署

PaddleOCR 手写数学公式识别算法 CAN 实战指南:Counting-Aware Network 训练、评估与推理部署

PaddleOCR 手写数学公式识别算法 CAN 实战指南:Counting-Aware Network 训练、评估与推理部署 【免费下载链接】PaddleOCR Turn any PDF or image document into structured data for your AI. A powerful, lightweight OCR toolkit that bridges the gap between i…

2026/10/3 7:41:27
Spring源码解析:构造器注入的类型转换与候选匹配机制

Spring源码解析:构造器注入的类型转换与候选匹配机制

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/3 16:42:24
openai-agents-python 多模型接入指南:深入解析 AnyLLMModel 适配层与 any-llm 路由

openai-agents-python 多模型接入指南:深入解析 AnyLLMModel 适配层与 any-llm 路由

openai-agents-python 多模型接入指南:深入解析 AnyLLMModel 适配层与 any-llm 路由 【免费下载链接】openai-agents-python A lightweight, powerful framework for multi-agent workflows 项目地址: https://gitcode.com/GitHub_Trending/op/openai-agents-pyth…

2026/10/3 16:42:28

日新闻

周新闻

月新闻