news 2026/7/19 1:09:46

时间维度切换:本周/本月/今年 Segmented Control

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
时间维度切换:本周/本月/今年 Segmented Control

前言

在“海风日记“的回顾页中,时间维度切换按钮允许用户在本周、本月和今年三个维度之间切换,查看不同时间范围内的写作统计。

本文将从源码出发,深入讲解 Segmented Control 的实现。


一、Segmented Control 实现

1.1 源码

@State selectedPeriod: number = 0 // 0=周, 1=月, 2=年 Row({ space: 8 }) { ForEach(['本周','本月','今年'], (label: string, i: number) => { Button(label) .layoutWeight(1).height(34) .fontSize(13) .fontColor(this.selectedPeriod === i ? '#FFFFFF' : COLOR_AMBER) .fontWeight(this.selectedPeriod === i ? FontWeight.Bold : FontWeight.Normal) .backgroundColor(this.selectedPeriod === i ? COLOR_PRIMARY : 'rgba(245,166,35,0.08)') .borderRadius(17) .border({ width: 1, color: this.selectedPeriod === i ? COLOR_PRIMARY : 'rgba(245,166,35,0.20)' }) .onClick(() => { this.selectedPeriod = i }) }) }

1.2 选中/未选中状态

状态文字颜色背景色边框字重
选中#FFFFFFCOLOR_PRIMARY橙色Bold
未选中COLOR_AMBER10% 橙色20% 橙色Normal

二、时间维度切换

.onClick(() => { this.selectedPeriod = i })

切换selectedPeriod后,UI 自动更新。实际应用中,可以在此处根据selectedPeriod加载对应时间范围的数据。


三、布局特点

Row({ space: 8 }) { ForEach(['本周','本月','今年'], (label, i) => { Button(label) .layoutWeight(1) // 等分宽度 .height(34) // 统一高度 .borderRadius(17) // 胶囊形 }) } .width('100%') .padding({ left: PAGE_PADDING, right: PAGE_PADDING })

四、常见问题

4.1 按钮宽度不一致

问题:三个按钮的宽度不同。

原因:按钮文字长度不同导致宽度自适应。

解决方案:使用layoutWeight(1)强制等分宽度。


总结

本文通过“海风日记“的 Segmented Control,深入讲解了时间维度切换的实现:

  1. ForEach 渲染:三个按钮
  2. 选中态样式:橙色背景 + 白色文字
  3. layoutWeight 等分:均匀分布
  4. onClick 切换:更新 selectedPeriod

下一篇文章将深入讲解AI 周报卡片,敬请期待。

如果这篇文章对你有帮助,欢迎点赞👍、收藏⭐、关注🔔,你的支持是我持续创作的动力!


相关资源:

  • Button 组件文档
  • ForEach 文档
  • layoutWeight 属性文档
  • 海风日记项目源码
  • [HarmonyOS 开发者官网](https://atomgit.com/openharmony/docs
  • 开源鸿蒙跨平台社区
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/19 1:09:36

传统行业职场人想转 AI,第一步不是辞职,而是把现有经验 AI 化

引言:AI 转型的普遍误区 —— 裸辞跨界,多数人折戟而归2026 年国内人工智能产业规模突破万亿,全年行业增速维持 30% 以上,制造、金融、零售、农业等传统行业 AI 渗透率突破 80%,AI 已经从互联网专属技术,变…

作者头像 李华
网站建设 2026/7/19 1:05:35

嵌入式音频通信:McBSP多通道选择与SIDETONE硬件加速详解

1. 项目概述:从TDM到McBSP的通道管理艺术在嵌入式音频和通信系统的开发中,我们常常面临一个核心矛盾:如何在有限的物理引脚和带宽资源下,高效、灵活地传输多路独立的音频或数据流?无论是数字音频接口(如I2S…

作者头像 李华
网站建设 2026/7/19 1:04:18

嵌入式GPMC配置实战:地址解码、WAIT引脚与总线时序优化

1. 项目概述:为什么GPMC的配置如此关键?在嵌入式系统开发,尤其是基于TI Sitara系列处理器(如AM62L)的设计中,外部存储器的连接与访问性能往往是决定系统稳定性和响应速度的关键瓶颈。处理器内部虽有高速缓存…

作者头像 李华
网站建设 2026/7/19 0:49:00

Kimi LeetCode 3621. 位计数深度为 K 的整数数目 I JavaScript实现

LeetCode 3621. 位计数深度为 K 的整数数目 I JavaScript 实现javascript /*** param {number} n* param {number} k* return {number}*/ var popcountDepth function(n, k) {// k0:只有 1 的深度为 0if (k 0) {return n > 1 ? 1 : 0;}// 计算一个整数的 popc…

作者头像 李华
网站建设 2026/7/19 0:48:58

Kimi LeetCode 3621. 位计数深度为 K 的整数数目 I Rust实现

LeetCode 3621. 位计数深度为 K 的整数数目 I Rust 实现rust impl Solution {pub fn popcount_depth(n: i64, k: i32) -> i64 {// k0:只有 1 的深度为 0if k 0 {return if n > 1 { 1 } else { 0 };}// 计算一个整数的 popcountfn pc(mut x: i32) -> i32 {…

作者头像 李华