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 更多功能页如果这篇文章对你有帮助欢迎点赞、收藏⭐、关注你的支持是我持续创作的动力

相关新闻

推荐系统隐式反馈挖掘:解决用户不点赞但实际喜欢的技术方案

推荐系统隐式反馈挖掘:解决用户不点赞但实际喜欢的技术方案

最近在开发推荐系统时,经常遇到一个头疼的问题:用户明明对内容很感兴趣,但就是不愿意点赞收藏,导致系统误判用户偏好,推荐质量直线下降。这种"沉默的喜欢"现象在大数据时代尤为常见,今天我们就来…

2026/9/27 7:43:38 阅读更多 →
Rust 内存安全不是银弹:逻辑漏洞不会因为用了 Rust 就消失的深入分析

Rust 内存安全不是银弹:逻辑漏洞不会因为用了 Rust 就消失的深入分析

Rust 内存安全不是银弹:逻辑漏洞不会因为用了 Rust 就消失的深入分析 一、Rust 到底帮你挡住了什么? 先把话说清楚——Rust 确实在消除一大类漏洞上做出了巨大贡献。根据微软和 Google 的安全报告,70% 以上的高危漏洞都与内存安全问题相关。…

2026/9/25 19:50:37 阅读更多 →
CDN带宽采购策略与成本优化实战指南

CDN带宽采购策略与成本优化实战指南

1. CDN带宽资源采购的核心逻辑 CDN带宽资源采购的本质是流量批发生意。和家庭宽带"按量付费"不同,CDN带宽采用"保底突发"模式运作。运营商通常要求客户承诺最低消费额度(比如每月10Gbps保底),在此基础上允许突…

2026/9/21 6:57:13 阅读更多 →

最新新闻

基于Java的元宇宙平台整车生产线管理系统:设计与实践

基于Java的元宇宙平台整车生产线管理系统:设计与实践

作为一个前后端带过不少毕业设计的老人,每年都能看到有人问“Java毕设选什么题”,我其实挺矛盾的。常规的增删改查管理系统做完就忘,复杂一点的又容易卡在环境搭建和业务逻辑上。今天想好好聊聊一个性价比非常高的选题:基于Java的…

2026/10/1 2:04:47 阅读更多 →
JS时间处理三原则:毫秒、时区、格式化分层实战

JS时间处理三原则:毫秒、时区、格式化分层实战

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

2026/10/1 2:04:47 阅读更多 →
InconsolataGo Nerd Font 字体实战指南:变体选择、下载与自行修补全流程

InconsolataGo Nerd Font 字体实战指南:变体选择、下载与自行修补全流程

开发工具CLI 【免费下载链接】nerd-fonts Iconic font aggregator, collection, & patcher. 3,600 icons, 50 patched fonts: Hack, Source Code Pro, more. Glyph collections: Font Awesome, Material Design Icons, Octicons, & more 项目地址: https://…

2026/10/1 2:04:47 阅读更多 →
VueUse useBroadcastChannel:用组合式 API 优雅封装 BroadcastChannel 跨标签页通信

VueUse useBroadcastChannel:用组合式 API 优雅封装 BroadcastChannel 跨标签页通信

前端 【免费下载链接】vueuse Collection of essential Vue Composition Utilities for Vue 3 项目地址: https://gitcode.com/gh_mirrors/vu/vueuse 点击查看 免费下载 导读 本文围绕 VueUse 中基于 Vue 3 组合式 API 实现的响应式 BroadcastChannel 封装 useBro…

2026/10/1 2:04:47 阅读更多 →
ebook2audiobook(E2A)完整实战指南:从电子书到带章节与元数据的多语言有声书

ebook2audiobook(E2A)完整实战指南:从电子书到带章节与元数据的多语言有声书

AI 应用语音音频本地部署 【免费下载链接】ebook2audiobook Generate audiobooks from e-books, voice cloning & 1158 languages! 项目地址: https://gitcode.com/GitHub_Trending/eb/ebook2audiobook 点击查看 免费下载 本文以匈牙利语版官方文档&#xff08…

2026/10/1 2:04:47 阅读更多 →
Go 学习路线图:基于 1000+ 手写示例与练习的渐进式精通指南(learngo 仓库)

Go 学习路线图:基于 1000+ 手写示例与练习的渐进式精通指南(learngo 仓库)

示例工程教程 【免费下载链接】learngo ❤️ 1000 Hand-Crafted Go Examples, Exercises, and Quizzes. 🚀 Learn Go by fixing 1000 tiny programs. 项目地址: https://gitcode.com/gh_mirrors/le/learngo 点击查看 免费下载 导读:本文围绕…

2026/10/1 2:03:47 阅读更多 →

日新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

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

2026/10/1 0:00:30 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

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

2026/10/1 0:00:30 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

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

2026/10/1 1:01:17 阅读更多 →

周新闻

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解 【免费下载链接】spirula-studio Cross-vendor 3D Gaussian Splatting trainer - video to splat to mesh, Vulkan or CUDA. 项目地址: https://gitcode.com/GitHub_Trending/sp/spirula-studio Sp…

2026/9/30 13:14:22 阅读更多 →
SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南 模板网站太丑不够用?别急着加滤镜,那是治标不治本。很多老板盯着后台流量掉得眼红,却还在纠结首页Banner的圆角是不是3像素。这就像穿着西装去挖土,姿势不对,努力白费。我整理这份 速查手册…

2026/9/30 18:13:06 阅读更多 →
FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏 【免费下载链接】FireRed-OpenStoryline FireRed-OpenStoryline is an AI video editing agent that transforms manual editing into intention-driven directing through natural language …

2026/9/30 13:14:49 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

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

2026/10/1 0:00:30 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

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

2026/10/1 0:00:30 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

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

2026/10/1 1:01:17 阅读更多 →