当前位置: 首页 > news >正文

HarmonyOS TempUtil 气象应用实战:多温度单位显示与用户偏好设置开发指南

文章目录

    • 背景
      • 方法总览
      • TempUtil 六种转换方法速览
      • 实战一:输入框 + 转换按钮
      • 实战二:华氏度转换
      • 实战三:开尔文转换
      • 实战四:滑块实时联动(最直观的交互)
      • 批量转换:一键输出常见温度对照
      • 设计建议:统一用摄氏度存储
      • 写在最后

背景

近期发现一款很有意思的HarmonyOS 三方库, 地址 @pura/harmony-utils(V1.4.0) , 作者是"桃花镇童长老", 我这里也是直接通过该作者公布的源码进行案例编写进行,写了到目前写了一部分demo ,感觉确实很有帮助,这里呢也是开始写一个系列的演示demo 供大家参考。如有帮助可以在OpenHarmony中进行下载安装进行使用哦

案例demo导航展示

↓↓↓↓↓↓接下来言归正传 ↓↓↓↓

方法总览

TempUtil 六种转换方法速览

先整体看一下 TempUtil 提供的全部转换能力:

// 从摄氏度出发TempUtil.C2F(c)// 摄氏度 → 华氏度TempUtil.C2K(c)// 摄氏度 → 开尔文// 从华氏度出发TempUtil.F2C(f)// 华氏度 → 摄氏度TempUtil.F2K(f)// 华氏度 → 开尔文// 从开尔文出发TempUtil.K2C(k)// 开尔文 → 摄氏度TempUtil.K2F(k)// 开尔文 → 华氏度

六种转换,全覆盖三个单位之间的互转关系。

实战一:输入框 + 转换按钮

Demo 里展示了最基础的输入框+按钮模式:

// 摄氏度转华氏度@StateinputC:string='100';TextInput({text:this.inputC,placeholder:'摄氏度值'}).width('100%').height(40).fontSize(13).type(InputType.Number).onChange(v=>{this.inputC=v;})this.Btn(`C2F(${this.inputC}) → 华氏度`,'#E74C3C',()=>{constc=parseFloat(this.inputC);constf=TempUtil.C2F(c);this.addLog(`C2F(${c}°C) →${f.toFixed(4)}°F`);})this.Btn(`C2K(${this.inputC}) → 开尔文`,'#C0392B',()=>{constc=parseFloat(this.inputC);constk=TempUtil.C2K(c);this.addLog(`C2K(${c}°C) →${k.toFixed(4)}K`);})

用户在输入框里填摄氏度,点按钮看转换结果。

注意用了type(InputType.Number)限制输入为数字,避免非数字输入导致parseFloat返回 NaN。

实战二:华氏度转换

// 华氏度转摄氏度@StateinputF:string='212';TextInput({text:this.inputF,placeholder:'华氏度值'}).width('100%').height(40).fontSize(13).type(InputType.Number).onChange(v=>{this.inputF=v;})this.Btn(`F2C(${this.inputF}) → 摄氏度`,'#F39C12',()=>{constf=parseFloat(this.inputF);constc=TempUtil.F2C(f);this.addLog(`F2C(${f}°F) →${c.toFixed(4)}°C`);})this.Btn(`F2K(${this.inputF}) → 开尔文`,'#E67E22',()=>{constf=parseFloat(this.inputF);constk=TempUtil.F2K(f);this.addLog(`F2K(${f}°F) →${k.toFixed(4)}K`);})

实战三:开尔文转换

@StateinputK:string='373.15';TextInput({text:this.inputK,placeholder:'开尔文值'}).width('100%').height(40).fontSize(13).type(InputType.Number).onChange(v=>{this.inputK=v;})this.Btn(`K2C(${this.inputK}) → 摄氏度`,'#3498DB',()=>{constk=parseFloat(this.inputK);constc=TempUtil.K2C(k);this.addLog(`K2C(${k}K) →${c.toFixed(4)}°C`);})this.Btn(`K2F(${this.inputK}) → 华氏度`,'#2980B9',()=>{constk=parseFloat(this.inputK);constf=TempUtil.K2F(k);this.addLog(`K2F(${k}K) →${f.toFixed(4)}°F`);})

实战四:滑块实时联动(最直观的交互)

这是 Demo 里最精彩的部分——用滑块拖动摄氏度,实时同步显示华氏度和开尔文:

@StatesliderC:number=0;Column({space:6}){Text(`当前:${this.sliderC}°C =${TempUtil.C2F(this.sliderC).toFixed(2)}°F =${TempUtil.C2K(this.sliderC).toFixed(2)}K`).fontSize(14).fontColor('#1a1a1a').width('100%').textAlign(TextAlign.Center)Slider({value:this.sliderC,min:-100,max:200,step:1}).width('100%').showTips(true).onChange(v=>{this.sliderC=Math.round(v);})Row({space:12}){Column(){Text(`${TempUtil.C2F(this.sliderC).toFixed(1)}°F`).fontSize(18).fontColor('#F39C12').fontWeight(FontWeight.Bold)Text('华氏度').fontSize(11).fontColor('#888')}.layoutWeight(1).alignItems(HorizontalAlign.Center)Column(){Text(`${TempUtil.C2K(this.sliderC).toFixed(2)}K`).fontSize(18).fontColor('#3498DB').fontWeight(FontWeight.Bold)Text('开尔文').fontSize(11).fontColor('#888')}.layoutWeight(1).alignItems(HorizontalAlign.Center)}}.padding(14).backgroundColor('#FFFFFF').borderRadius(10).width('100%')

核心是:

  • @State sliderC是响应式状态
  • 滑块onChange时更新sliderC
  • Text里直接调用TempUtil.C2F(this.sliderC)TempUtil.C2K(this.sliderC),状态变化时自动重新计算和渲染

这就是 ArkTS 响应式编程的精髓:数据驱动 UI,不需要手动更新文本。

批量转换:一键输出常见温度对照

// 摄氏度批量转换this.Btn('C2F 批量: -40/0/20/37/100°C','#E74C3C',()=>{[-40,0,20,37,100].forEach(c=>{this.addLog(`C2F(${c}°C) =${TempUtil.C2F(c).toFixed(2)}°F`);});})this.Btn('C2K 批量: -273.15/0/20/100°C','#C0392B',()=>{[-273.15,0,20,100].forEach(c=>{this.addLog(`C2K(${c}°C) =${TempUtil.C2K(c).toFixed(2)}K`);});})

批量转换的输出:

C2F(-40°C) = -40.00°F C2F(0°C) = 32.00°F C2F(20°C) = 68.00°F C2F(37°C) = 98.60°F C2F(100°C) = 212.00°F

设计建议:统一用摄氏度存储

对于多单位展示的应用,推荐:

  • 存储:统一用摄氏度(°C)存储,作为"主单位"
  • 展示:根据用户偏好设置转换后显示
  • 转换:使用 TempUtil 在显示时做实时转换

这样无论用户选择哪种单位显示,数据只存一份,逻辑清晰。

写在最后

TempUtil 的六个方法非常轻量,但用好了能让温度相关功能的代码非常干净。

特别是配合 ArkTS 的响应式状态变量,做实时联动转换的 UI 代码量非常少。

http://www.gsyq.cn/news/1427320.html

相关文章:

  • 终极魔兽争霸3优化指南:WarcraftHelper让你的经典游戏焕然一新
  • 神经渲染对抗训练全解析:从原理到产业,一篇就够了!
  • 国家大基金领投!DeepSeek首轮融资700亿,450亿美元估值背后有何底气?
  • 从零搭建企业虚拟化平台:Vcenter 8.0 + ESXi 8.0 完整配置与资源整合实战
  • Lindy数据流水线构建全周期(从手动脚本到自愈式Pipeline大揭秘)
  • 告别低效循环:用NumPy向量化加速你的深度学习代码(附逻辑回归实战对比)
  • LinkSwift网盘直链下载解决方案:为技术爱好者和普通用户提供的高速下载体验
  • 太原市尖草坪区宇馨家具:专业的太原沙发维修哪家好 - LYL仔仔
  • 2026 AI-CRM TOP6深度测评:生成式AI如何重构客户管理 - Joyky
  • NetTools Web版本终于有了它该有的样子
  • 揭秘:为什么Windows用户需要一款专属的AirPods桌面伴侣?
  • 保姆级教程:用Arduino IDE给CH552G小键盘烧录固件(附HFS本地服务器搭建避坑指南)
  • 2026 净水器十大品牌推荐:全屋净水优选,安全省心之选
  • 终极AMD Ryzen调试工具:专业硬件调校完全指南
  • 终极视频修复指南:使用Untrunc免费拯救损坏的MP4/MOV文件
  • Claude vs GPT-4 Turbo vs Gemini 1.5 Pro:横向压测12项任务,成本效率比值首次权威发布
  • 2026年佛山市CPPM报名十大核心问题全流程答疑 - 众智商学院课程中心
  • 好用的网络投票平台推荐|2026实测口碑实用款 - 微信投票小程序
  • C语言字符串格式化输出:%s精度控制与安全实践
  • 洛谷P3366 【模板】最小生成树题解
  • 上海湘峰图文制作:普陀上海企业文化墙制作公司有哪些 - LYL仔仔
  • 2026年国内水晶装饰建材采购指南:隔音玻璃砖与热熔艺术水晶砖深度评测 | K9高透水晶砖水晶柱装饰水晶挂片背景墙工程水晶定制源头工厂全国服务 - 企业品牌优选推荐官
  • 从标准库到HAL库:一个STM32初学者的真实踩坑与避坑指南(附江科协视频推荐)
  • WorkshopDL终极指南:无需Steam客户端下载创意工坊资源的完整方案
  • 告别卡顿!Unity 2020.3 LTS安卓高刷屏适配指南:从Activity入手搞定帧率与刷新率同步
  • 乌鲁木齐黄金上门回收平台对比2026 - 黄金回收
  • 区块链与第四次工业革命融合:构建可信数据协作新范式
  • 《B4500 [GESP202603 三级] 凯撒密码》
  • 2026四川文化艺术学院报考指南:哪些专业就业率高? - 品牌2025
  • 手把手教你用ntdsutil命令,把辅域控扶正成主域控(Windows Server 2022实战)