news 2026/7/18 5:14:41

HarmonyOS7公告样式跑马灯实战:公告条视觉包装

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
HarmonyOS7公告样式跑马灯实战:公告条视觉包装

文章目录

      • 前言
      • 先看这个页面解决了什么问题
      • 页面结构速览
      • 关键状态是怎么组织的
      • 业务逻辑最值得看的函数
      • 第一段重点代码:状态与数据入口
      • 第二段重点代码:核心交互逻辑
      • 使用方法:把页面跑起来之后怎么操作
      • 这个实现为什么值得借鉴
      • 可以继续优化的地方
      • 完整代码
      • 最后总结

前言

有时候真正重要的不是“能滚”,而是“看起来像公告”。这个案例把 Marquee 和提示色、标签、卡片化容器结合起来,更接近真实产品界面。 这一篇不只带你把页面看懂,我会顺着代码结构、数据组织和交互路径,把它拆成一个开发者真正能复用的实现模板。

先看这个页面解决了什么问题

这个案例主要解决三件事:

  • 公告样式跑马灯的核心数据集中托管在组件状态中。
  • 让用户在一个页面里完成查看、筛选、操作、反馈的完整闭环。
  • 用相对克制的 ArkUI 组件组合,把业务信息分层展示出来。

从实用角度看,这种页面通常都不是孤立存在的,它往往会挂在应用的某个一级入口下面。也就是说,示例里很多处理方式,都可以直接迁移到真实项目。

页面结构速览

先不急着看细节,先把页面结构建立起来:

区域作用代码里的体现
顶部区域提供标题与导航返回Row+Image+Text
内容主体展示核心信息与主操作区Column/List/Scroll等组合
统计或辅助区展示聚合信息、筛选项或说明文字计算属性与状态联动
行为入口处理新增、切换、确认、推进等动作事件函数和按钮点击逻辑

这一页里出现的主要数据类型有:页面内直接使用基础类型。

关键状态是怎么组织的

这类页面能不能写稳,关键往往不在布局,而在状态设计。当前案例里比较值得关注的状态包括:

  • isShow

先讲状态字段,再讲它们如何驱动界面切换和数据刷新。

如果你自己扩展这个页面,建议优先判断哪些数据属于:

  • 长期状态:需要持续保留在页面上的数据,比如列表内容、筛选条件。
  • 瞬时状态:只在某一次交互中短暂生效,比如弹窗开关、输入框值、当前选中项。
  • 派生状态:不必单独保存,而是通过计算属性实时推导出来。

业务逻辑最值得看的函数

当前页面里,建议优先读下面这些方法:

  • if

我更建议你按照“先看输入,再看输出,最后看状态修改”的顺序去理解这些函数。这样读代码,比从头到尾硬看要轻松很多。

第一段重点代码:状态与数据入口

这部分代码定义了页面最核心的数据源,是理解整个案例的起点。

@StateisShow:boolean=truebuild(){Column(){if(this.isShow){Column({space:16}){Text('公告样式跑马灯').fontSize(20).fontWeight(FontWeight.Bold).fontColor(DEMO_THEME_COLOR)Text('将 Marquee 组件美化成通知公告栏的样式').fontSize(13).fontColor(DEMO_SUBTEXT_COLOR).width('100%')// 紧急通知Column({space:12}){Row({space:8}){Text('紧急')

这里有几个很实用的判断标准:

  • @State字段通常就是页面的驱动中心。
  • 如果一个字段一改,界面就会立即跟着变化,那它大概率就应该放进状态里。
  • 如果某个值完全可以通过已有状态算出来,就更适合做计算属性。

第二段重点代码:核心交互逻辑

真正决定这个页面“好不好用”的,往往不是布局,而是交互逻辑是否顺手。下面这段代码就是关键部分:

/** * 公告样式跑马灯 - 公告样式跑马灯 */import{PRESET_COLORS,generateListItems,DEMO_BG_COLOR,DEMO_CARD_COLOR,DEMO_THEME_COLOR,DEMO_SUBTEXT_COLOR}from'./types'@Entry@Componentstruct MarqueeNoticeStyle{@StateisShow:boolean=truebuild(){Column(){if(this.isShow){Column({space:16}){Text('公告样式跑马灯').fontSize(20).fontWeight(FontWeight.Bold).fontColor(DEMO_THEME_COLOR)Text('将 Marquee 组件美化成通知公告栏的样式')

可以重点注意三件事:

  1. 这个函数接收了什么输入。
  2. 它到底修改了哪些状态。
  3. 修改之后,页面上哪些区域会同步刷新。

把这三点串起来,基本就能搞懂页面的交互链路。

使用方法:把页面跑起来之后怎么操作

如果你想验证这个案例是否真正理解到位,可以按下面顺序手动操作一遍:

  1. 先进入页面,观察顶部信息和默认展示内容。
  2. 再尝试切换筛选项、按钮或标签,看列表是否会立即变化。
  3. 接着执行一次主操作,比如新增、切换、标记、选择或推进。
  4. 最后回头观察统计区、提示区或状态区有没有同步更新。

如果这一整套流程都能说清楚,说明你已经不只是“看懂了界面”,而是看懂了它的运行机制。

这个实现为什么值得借鉴

从 ArkUI 工程角度看,这个案例至少有三点值得保留:

  • 状态粒度比较克制:没有把所有东西都拆成独立变量。
  • 视图结构相对清楚:顶部、内容区、辅助区和操作区分得开。
  • 业务函数命名直白:阅读和后续维护成本都比较低。

尤其是在做教学示例时,这种写法很重要。因为读者不是来欣赏技巧的,而是来确认“这个页面到底怎么搭起来”。

可以继续优化的地方

如果你准备把这个页面继续扩展成正式项目,我会优先改这几件事:

  • 把数据模型和页面组件拆开,避免页面文件承担过多职责。
  • 把重复使用的卡片、标签、行项抽成独立组件。
  • 给关键操作补上更明确的异常处理、空状态和边界提示。
  • 如果涉及远程数据,再补上加载态和接口层封装。

完整代码

下面保留案例完整代码,方便你直接对照学习、复制和重构。

/** * 公告样式跑马灯 - 公告样式跑马灯 */import{PRESET_COLORS,generateListItems,DEMO_BG_COLOR,DEMO_CARD_COLOR,DEMO_THEME_COLOR,DEMO_SUBTEXT_COLOR}from'./types'@Entry@Componentstruct MarqueeNoticeStyle{@StateisShow:boolean=truebuild(){Column(){if(this.isShow){Column({space:16}){Text('公告样式跑马灯').fontSize(20).fontWeight(FontWeight.Bold).fontColor(DEMO_THEME_COLOR)Text('将 Marquee 组件美化成通知公告栏的样式').fontSize(13).fontColor(DEMO_SUBTEXT_COLOR).width('100%')// 紧急通知Column({space:12}){Row({space:8}){Text('紧急').fontSize(10).fontWeight(FontWeight.Bold).fontColor('#FFFFFF').backgroundColor('#F44336').padding({left:8,right:8,top:3,bottom:3}).borderRadius(4)Marquee({start:true,step:6,loop:-1,fromStart:true,src:'系统维护通知:今晚 22:00-次日 02:00 进行系统升级维护,届时部分服务将暂停使用'}).layoutWeight(1).height(32).fontSize(13).fontColor('#F44336').backgroundColor('#FFEBEE').borderRadius(16)}.width('100%')// 系统通知Row({space:8}){Text('通知').fontSize(10).fontWeight(FontWeight.Bold).fontColor('#FFFFFF').backgroundColor(DEMO_THEME_COLOR).padding({left:8,right:8,top:3,bottom:3}).borderRadius(4)Marquee({start:true,step:4,loop:-1,fromStart:true,src:'新版本 v3.2.0 已发布,修复已知问题并优化性能体验,建议尽快更新'}).layoutWeight(1).height(32).fontSize(13).fontColor(DEMO_THEME_COLOR).backgroundColor('#E8EAF6').borderRadius(16)}.width('100%')// 活动公告Row({space:8}){Text('活动').fontSize(10).fontWeight(FontWeight.Bold).fontColor('#FFFFFF').backgroundColor(PRESET_COLORS[0].value).padding({left:8,right:8,top:3,bottom:3}).borderRadius(4)Marquee({start:true,step:3,loop:-1,fromStart:true,src:'618 限时优惠活动火热进行中,全场商品低至 5 折,先到先得'}).layoutWeight(1).height(32).fontSize(13).fontColor(PRESET_COLORS[0].value).backgroundColor('#E8F5E9').borderRadius(16)}.width('100%')// 带图标的公告Row({space:8}){Text('📢').fontSize(16)Marquee({start:true,step:4,loop:-1,fromStart:true,src:'HarmonyOS 开发者社区招募版主,有意者请发送申请至 dev@harmonyos.com'}).layoutWeight(1).height(36).fontSize(13).fontColor('#333333').backgroundColor('#FFF8E1').borderRadius(18)}.width('100%')// 安全提示Row({space:8}){Text('⚠').fontSize(16)Marquee({start:true,step:3,loop:-1,fromStart:true,src:'安全提醒:请勿在公共网络环境下输入敏感信息,保护好您的账户安全'}).layoutWeight(1).height(36).fontSize(13).fontColor('#E65100').backgroundColor('#FFF3E0').borderRadius(18)}.width('100%')}.width('100%').padding(16).backgroundColor(DEMO_CARD_COLOR).borderRadius(12)}.alignItems(HorizontalAlign.Start)}Text('公告样式跑马灯 - 公告样式跑马灯').fontSize(12).fontColor('#999999').margin({top:12})}.width('100%').height('100%').backgroundColor(DEMO_BG_COLOR).padding(16)}}

最后总结

公告样式跑马灯 这个案例并不靠复杂技巧取胜,它更像一个结构扎实、逻辑完整的业务页面样板。把这篇文章里的状态设计、函数组织和页面分层吃透之后,你再去写同类型功能,速度会明显快很多。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/18 5:14:01

Shopify Remix应用开发全流程指南

1. Shopify Remix App开发全流程解析 Shopify作为全球领先的电商SaaS平台,其应用生态为开发者提供了广阔的舞台。而Remix作为新兴的全栈框架,结合React和Node.js技术栈,正在成为构建Shopify应用的高效选择。我最近刚完成一个Shopify Remix A…

作者头像 李华
网站建设 2026/7/18 5:13:52

Spring Boot定时任务实现:从零构建消息推送系统

每天定时给"义父"请安,这种看似玩笑的互动背后,其实隐藏着一个技术问题:如何实现自动化、个性化的定时消息推送?如果你正在开发社交应用、智能助手,或者只是想用技术解决重复性工作,那么定时消息…

作者头像 李华
网站建设 2026/7/18 5:12:01

机器学习博士生存手记:从解题者到问题定义者的范式跃迁

1. 这不是“读博指南”,而是一份机器学习博士生的生存手记我带过7届ML方向的博士生,自己也从MIT CSAIL实验室熬出来,在NeurIPS和ICML审过200篇投稿,也亲手拒掉过不少看起来光鲜但内里空洞的论文。今天写的这篇,不叫“P…

作者头像 李华
网站建设 2026/7/18 5:11:50

国产AI编程工具选型指南:从真实场景出发的深度评估

1. 这份“不完整”报告,为什么比大多数“完整”报告更有价值?你点开一份标题叫《国产 AI 编程工具不完整调研分析报告》的文档,第一反应可能是:这名字就透着一股“不专业”的气息——调研报告不就该追求全面、精确、无死角吗&…

作者头像 李华
网站建设 2026/7/18 5:11:41

184.基于 CODESYS IEC61131-3 ST 多层功能块带防抖、气缸超时故障的三色物料分拣 PLC 控制系统设计

摘要 可编程逻辑控制器(PLC)是工业自动化系统的核心执行单元,其本质是一种专为工业环境设计的数字运算操作电子系统。本文以IEC 61131-3标准中的结构化文本(ST)语言为主线,从硬件架构、扫描周期、数据类型等底层原理出发,逐步深入到工程级代码实现。通过一个完整的物料…

作者头像 李华
网站建设 2026/7/18 5:11:38

ROS机器人自主探索:explore_lite前沿算法原理与工程实践

1. 项目概述:让机器人自己“看”世界如果你玩过一些策略游戏,比如《星际争霸》或者《文明》,开局时地图一片漆黑,你需要派侦察兵去探索未知区域,才能获取资源、发现敌人。在机器人领域,尤其是服务机器人、仓…

作者头像 李华