HarmonyOS智能家居——设置页面的分组菜单与开关交互
设置页面是智能家居 App 里菜单项最多的页面——三组菜单共 12 个选项其中 5 个是可切换的开关7 个是跳转链接。从截图看页面分四个区域顶部用户卡片、设备管理3 项链接、偏好设置5 项开关、系统4 项链接底部有一个红色的退出登录按钮。实现上用了三个 BuilderLink、Toggle、Div把菜单项的两种形态——可跳转的链接和可切换的开关——分别抽象成了独立的 Builder。完整效果数据结构StatenotifyOn:booleantrueStatedarkMode:booleanfalseStateautoUpdate:booleantrueStatevoiceWake:booleantrueStateenergySave:booleanfalse五个State布尔值分别控制五个开关的状态。每个开关都是独立的——修改通知提醒不会影响深色模式。这种每个开关一个变量的做法虽然啰嗦5 个变量但最直观新手也能看懂。更紧凑的做法是用一个对象管理所有开关Statesettings:Recordstring,boolean{notify:true,darkMode:false,autoUpdate:true,voiceWake:true,energySave:false}但 ArkTS 里Record的属性修改不会自动触发State刷新需要额外处理。在当前规模下5 个独立变量是更稳妥的选择。用户卡片Row(){Stack(){Column(){}.width(50).height(50).borderRadius(25).linearGradient({angle:135,colors:[[A,0],[#A78BFA,1]]})Text().fontSize(22)}Column(){Text(我的家).fontSize(16).fontWeight(FontWeight.Bold).fontColor(T1)Text(5个房间 · 17台设备).fontSize(12).fontColor(T3).margin({top:2})}.alignItems(HorizontalAlign.Start).margin({left:14}).layoutWeight(1)SymbolGlyph($r(sys.symbol.chevron_right)).fontSize(14).fontColor([#DDD])}.width(100%).padding(18).backgroundColor(#FFFFFF).borderRadius(18).margin({left:16,right:16,bottom:16}).onClick((){router.pushUrl({url:pages/RoomPage,params:{room:客厅}asRecordstring,Object})})用户卡片的结构和运动健康 App、旅行 App 的个人中心卡片一致——左侧渐变圆头像 中间文字 右侧箭头。点击后跳转到 RoomPage默认显示客厅。5个房间 · 17台设备是硬编码的——没有从ROOMS.length和DEVICES.length动态计算。如果以后数据变化需要手动更新这个字符串。更好的做法是动态拼接Text(ROOMS.length个房间 · DEVICES.length台设备)但在原型阶段写死更省事。三组菜单的分组结构// 设备管理Column({space:0}){Text(设备管理).fontSize(12).fontWeight(FontWeight.Bold).fontColor(T3).width(100%).padding(14).padding({bottom:4})this.Link(,家庭管理,管理房间和设备,(){...})this.Div()this.Link(,语音助手,小爱同学 · 已连接,(){...})this.Div()this.Link(,添加设备,扫描附近的新设备,(){...})}每组菜单用一个Column({ space: 0 })包裹顶部是灰色的组标题12px、T3 颜色下方是菜单项列表。space: 0保证菜单项之间没有额外间距——间距由 Div 分割线控制。组标题用fontSize(12)fontWeight(Bold)fontColor(T3)视觉上比菜单项更小更淡形成明确的主次关系。标题下方的padding({ bottom: 4 })给标题和第一个菜单项之间留了一点呼吸空间。菜单项的两种形态设备管理和系统组用的是Link带右箭头的跳转链接偏好设置组用的是Toggle带开关状态的切换项。两种形态的视觉结构几乎一样——左侧 emoji 中间文字标题 副标题区别只在右侧Link灰色右箭头SymbolGlyphToggle绿色开或灰色关文字Link BuilderBuilderLink(icon:string,label:string,sub:string,action:()void){Row(){Text(icon).fontSize(18).margin({right:12})Column(){Text(label).fontSize(14).fontColor(T1)Text(sub).fontSize(11).fontColor(T3).margin({top:1})}.alignItems(HorizontalAlign.Start).layoutWeight(1)SymbolGlyph($r(sys.symbol.chevron_right)).fontSize(12).fontColor([#DDD])}.width(100%).padding({left:14,right:14,top:12,bottom:12}).onClick(action)}四个参数图标、标题、副标题、回调。副标题用 T3 颜色#BBBBBB和 11px 字号比标题T1、14px更淡更小形成信息层次。右箭头用系统 SymbolGlyph 而不是 emoji视觉上更规范。Toggle BuilderBuilderToggle(icon:string,label:string,sub:string,on:boolean,action:()void){Row(){Text(icon).fontSize(18).margin({right:12})Column(){Text(label).fontSize(14).fontColor(T1)Text(sub).fontSize(11).fontColor(T3).margin({top:1})}.alignItems(HorizontalAlign.Start).layoutWeight(1)Text(on? 开:⚫ 关).fontSize(12).fontColor(on?A:T3)}.width(100%).padding({left:14,right:14,top:12,bottom:12}).onClick(action)}五个参数图标、标题、副标题、开关状态、回调。比 Link 多了一个on参数控制右侧显示 开还是⚫ 关。开关状态文字的颜色也跟随变化——开启时用主色#6C5CE7关闭时用 T3 灰色。这让开关状态不只是文字不同颜色也提供了视觉反馈。和原生 Toggle 组件的区别HarmonyOS 有内置的Toggle组件但这里没有用。原因是内置 Toggle 的样式比较固定——一个滑块在圆形轨道上左右滑动。而这个页面的开关用文字“开”/“关” emoji 圆点来表示视觉上更轻量和菜单项的文字风格更协调。在需要安静的设置页面里文字开关比滑块开关更不抢眼——用户扫一眼就能看到哪些开着哪些关着不需要辨认滑块的位置。分割线 Div BuilderBuilderDiv(){Divider().strokeWidth(0.5).color(#F0EEF4).margin({left:56})}分割线从左侧 56px 开始——跳过了 emoji 图标18px 右边距12px 一点余量让分割线从文字区域开始不会穿过图标。这个margin({ left: 56 })的值和运动健康 App、旅行 App 里的分割线处理方式一致。strokeWidth(0.5)是最细的分割线——0.5vp 在高分辨率屏幕上几乎是一条细线既能分隔菜单项又不会太显眼。退出登录按钮Row(){Text(退出登录).fontSize(15).fontWeight(FontWeight.Bold).fontColor(#FF6B6B)}.width(100%).height(50).backgroundColor(#FFFFFF).borderRadius(18).justifyContent(FlexAlign.Center).margin({left:16,right:16,bottom:30}).onClick((){router.back()})红色文字、居中对齐、独立的白色卡片。点击后只是router.back()——没有实际的退出登录逻辑只是一个 UI 占位。按钮用justifyContent(FlexAlign.Center)让文字水平居中和菜单项的左对齐形成对比。视觉上退出按钮和其他菜单项明显不同——它不是菜单里的一项而是独立的操作。三组菜单的功能映射分组菜单项类型点击行为设备管理家庭管理Link跳转 RoomPage设备管理语音助手Link切换 voiceWake设备管理添加设备Link跳转 RoomPage偏好设置通知提醒Toggle切换 notifyOn偏好设置深色模式Toggle切换 darkMode偏好设置自动更新Toggle切换 autoUpdate偏好设置语音唤醒Toggle切换 voiceWake偏好设置节能模式Toggle切换 energySave系统网络设置Link跳转 RoomPage系统固件更新Link跳转 SecurityPage系统数据统计Link跳转 EnergyPage系统关于Linkrouter.back()12 个菜单项中只有 5 个有实际的状态切换逻辑偏好设置组其他 7 个要么跳转到已有页面要么是空操作。这种少数真实、多数占位的分布是设置页面的典型状态——先把菜单结构搭好功能后面逐步填充。语音助手的特殊行为语音助手在设备管理组里用的是 Link 样式有右箭头但点击行为是切换voiceWake状态——和偏好设置里的语音唤醒切换的是同一个变量。这意味着点击语音助手会同时影响两个菜单项的显示状态因为它们共享State voiceWake。这种两个菜单项控制同一个状态的设计在实际 App 里不太常见但在原型阶段可以接受——它演示了State变量可以在不同 Builder 之间共享。设置页面和其他页面的状态差异设置页面的State变量和其他页面有一个关键区别——它们的修改不会影响其他页面修改notifyOn不会影响首页的任何显示修改darkMode不会真的切换深色主题修改energySave不会影响设备的实际能耗这是因为这些开关目前只控制页面内的显示状态没有接入真实的功能逻辑。在真正的 App 里darkMode需要切换全局主题energySave需要修改设备的运行参数notifyOn需要控制系统的通知权限。这些功能需要通过服务层或全局状态管理来实现不能只靠页面内的State。

相关新闻

AI手机交互技术解析与应用场景实测

AI手机交互技术解析与应用场景实测

1. 重新定义手机交互的AI革命当我的手指第一次在搭载全场景AI引擎的手机屏幕上划过时,那种流畅的响应让我想起十年前第一次使用智能手机的震撼。如今的AI手机早已不是简单的语音助手升级版,而是将神经网络处理器、多模态交互和情境感知计算深度融合的智能…

2026/7/15 15:22:19阅读更多 →
头像细化技巧:从视觉引导到层次控制的完整指南

头像细化技巧:从视觉引导到层次控制的完整指南

你有没有过这样的经历:明明画了个不错的草稿,一上色就崩;或者线稿看着还行,一细化就面目全非?这不是你技术不行,而是很多人把“细化”理解错了——它不是一个按部就班的流程,而是一套关于取舍的…

2026/7/15 4:17:43阅读更多 →
Codex编程智能体实战:从环境配置到多智能体工作流部署

Codex编程智能体实战:从环境配置到多智能体工作流部署

这类 AI 编程助手工具,最值得先看的不是功能列表,而是它到底能不能在你的日常开发环境里稳定跑起来,以及它和常见的代码补全、PR 审查、重构工具有什么实际区别。Codex 作为 OpenAI 推出的编程智能体,主打的是“端到端任务支持”和…

2026/7/15 14:10:58阅读更多 →
游戏数据损坏恢复指南:从技术排查到备份策略

游戏数据损坏恢复指南:从技术排查到备份策略

那天下午,我正埋头调试一段特别顽固的代码,隔壁工位的同事突然发出一声哀嚎——他连续奋战了十几个小时的游戏存档,在更新后提示“数据损坏,无法读取”。那一瞬间,他脸上的表情,从难以置信到绝望&#xff0…

2026/7/15 21:25:18阅读更多 →
从安装到调用一步到位:Hermes AI Agent保姆级教程(2026亲测可用)

从安装到调用一步到位:Hermes AI Agent保姆级教程(2026亲测可用)

前言 最近AI Agent工具更新得真快,刚熟悉“养虾”(OpenClaw),又冒出了“养马”(Hermes)。不少朋友想试试这个以“记忆强、会进化”为特色的框架,却卡在安装配置上。这篇文章就把从下载安装到模…

2026/7/15 21:25:18阅读更多 →
TUSB8044A USB集线器配置寄存器详解与I2C/SMBus编程实战

TUSB8044A USB集线器配置寄存器详解与I2C/SMBus编程实战

1. 项目概述与核心价值在嵌入式硬件和USB外设开发领域,尤其是设计USB 3.2集线器或扩展坞时,我们常常会遇到一个核心需求:如何让同一颗硬件芯片,在不同的产品形态和应用场景下,表现出不同的“性格”?这里的“…

2026/7/15 21:25:18阅读更多 →
Cursor AI状态管理失效的7个隐秘征兆:92%的团队在第3步就已失控,你中招了吗?

Cursor AI状态管理失效的7个隐秘征兆:92%的团队在第3步就已失控,你中招了吗?

更多请点击: https://codechina.net 第一章:Cursor AI状态管理失效的真相与认知重构 Cursor AI 的状态管理失效并非源于工具本身的崩溃,而是开发者对“AI 驱动状态”的隐式假设与实际运行时行为之间存在根本性错位。当用户在编辑器中依赖 Cu…

2026/7/15 21:25:18阅读更多 →
【限时解密】ChatGPT职业规划私域模型:仅开放给前500名读者的8维能力图谱+动态适配算法

【限时解密】ChatGPT职业规划私域模型:仅开放给前500名读者的8维能力图谱+动态适配算法

更多请点击: https://codechina.net 第一章:ChatGPT职业规划私域模型的底层逻辑与价值定位 ChatGPT职业规划私域模型并非简单地将大语言模型接入求职场景,而是以“用户职业生命周期”为轴心,构建具备数据主权、行为闭环与认知迭代…

2026/7/15 21:25:18阅读更多 →
软件环境配置和git操作

软件环境配置和git操作

一、下载的软件 1.python解析器 2.MySQL8数据库 3.codex和Trae cn AI agent 4.Gitgitee 如何检验是否安装成功 1.python和mysql2.codex和trae 只需看到应用图标 3.git 在桌面任意地方右键 点击显示更多选项 看到两个git图表即可 或者 4.gitee 登录账号 二、各软件的作用…

2026/7/15 21:20:17阅读更多 →
VSCode TypeScript 环境配置对比:全局安装 vs 项目本地安装的4个关键差异

VSCode TypeScript 环境配置对比:全局安装 vs 项目本地安装的4个关键差异

VSCode TypeScript 环境配置对比:全局安装 vs 项目本地安装的4个关键差异当你在VSCode中启动一个新的TypeScript项目时,第一个技术决策往往从安装方式开始。这个看似简单的选择——全局安装还是项目本地安装——实际上会深刻影响你的开发流程、团队协作和…

2026/7/15 6:42:19阅读更多 →
智慧树刷课插件:5分钟实现自动化学习的智能助手

智慧树刷课插件:5分钟实现自动化学习的智能助手

智慧树刷课插件:5分钟实现自动化学习的智能助手 【免费下载链接】zhihuishu 智慧树刷课插件,自动播放下一集、1.5倍速度、无声 项目地址: https://gitcode.com/gh_mirrors/zh/zhihuishu 智慧树刷课插件是一款专为智慧树在线教育平台设计的Chrome浏…

2026/7/15 6:12:45阅读更多 →
Steam创意工坊下载器WorkshopDL:跨平台游戏模组获取的终极解决方案

Steam创意工坊下载器WorkshopDL:跨平台游戏模组获取的终极解决方案

Steam创意工坊下载器WorkshopDL:跨平台游戏模组获取的终极解决方案 【免费下载链接】WorkshopDL WorkshopDL - The Best Steam Workshop Downloader 项目地址: https://gitcode.com/gh_mirrors/wo/WorkshopDL 你是否在GOG或Epic Games Store购买了心仪的游戏…

2026/7/15 10:54:00阅读更多 →
AI框架决定企业AI能走多远

AI框架决定企业AI能走多远

企业AI建设的第一性原理 企业搞AI,最关键的决定是什么?不是选哪家大模型,不是先做哪个场景,不是招多少AI人才——而是选哪个AI开发框架。 为什么?因为框架决定了企业AI能力的"天花板"。选对了框架&#xff0…

2026/7/15 0:01:30阅读更多 →
Java企业为什么需要AI框架

Java企业为什么需要AI框架

Java企业在AI时代的尴尬处境 Java是全球企业级应用开发的主流语言——全球超过一半的企业系统跑在Java上。但在AI浪潮面前,很多Java企业感到尴尬:大模型的接口是各种语言的,AI开发社区以其他语言为主流,似乎Java在AI时代"掉队…

2026/7/15 0:01:30阅读更多 →
CC3230x嵌入式开发实战:SD主机、定时器与低功耗模式深度解析

CC3230x嵌入式开发实战:SD主机、定时器与低功耗模式深度解析

1. 项目概述:为什么需要关注CC3230x的SD主机、定时器与低功耗?在物联网和嵌入式设备开发领域,我们常常面临一个核心矛盾:设备需要具备强大的连接能力、可靠的数据存储和实时控制功能,同时又必须严格控制功耗以延长电池…

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

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

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

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

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

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

2026/7/15 8:52:38阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

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

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

2026/7/15 14:06:23阅读更多 →