鸿蒙原生开发手记:徒步迹 - ArkUI 声明式UI基础组件

发布时间:2026/7/14 2:26:44

鸿蒙原生开发手记:徒步迹 - ArkUI 声明式UI基础组件
学习 ArkUI 核心组件构建徒步迹的用户界面基础一、前言ArkUI 是鸿蒙原生应用的声明式 UI 框架采用类似 SwiftUI 和 Jetpack Compose 的声明式编程范式。开发者只需描述 UI 的最终状态框架自动处理状态变化时的界面更新。本文将系统介绍 ArkUI 的基础组件包括布局容器、文本、图片、按钮、输入框等并结合徒步迹的实际场景演示用法。二、组件基础结构2.1 组件树ArkUI 中每个页面由组件树构成组件通过链式调用设置属性EntryComponentstruct ExamplePage{build(){Column(){// 父组件列布局Text(Hello)// 子组件1文本.fontSize(20)// 链式属性设置.fontColor(#333);Button(点击)// 子组件2按钮.onClick((){});}.width(100%)// 父组件属性.padding(16);}}2.2 组件分类ArkUI 组件按功能可分为布局组件Column、Row、Stack、Flex、Grid、List基础组件Text、Image、Button、TextInput、Slider展示组件Progress、LoadingProgress、Badge、Panel交互组件Dialog、Menu、Picker、DatePicker导航组件Navigation、Tab、NavRouter三、布局容器3.1 Column - 垂直布局Column 是最常用的垂直排列布局子组件从上到下排列// 徒步迹 - 个人中心头部布局Column(){// 头像Image($r(app.media.avatar)).width(80).height(80).borderRadius(40);// 用户名Text(徒步爱好者).fontSize(20).fontWeight(FontWeight.Bold).fontColor($r(app.color.text_primary));// 统计信息Text(累计徒步 86km).fontSize(14).fontColor($r(app.color.text_secondary));}.width(100%).alignItems(HorizontalAlign.Center)// 居中对齐.padding(24);3.2 Row - 水平布局Row 用于水平排列子组件// 徒步迹 - 今日概览统计行Row(){this.StatItem(,8,642,步数);this.StatItem(,5.2,距离);this.StatItem(,320,卡路里);}.width(100%).justifyContent(FlexAlign.SpaceAround);// 均匀分布3.3 Stack - 层叠布局Stack 用于组件叠加类似 CSS 的 position: absolute// 徒步迹 - 路线卡片顶部区域Stack(){// 背景图片Image($r(app.media.route_bg)).width(100%).height(140).objectFit(ImageFit.Cover);// 难度标签叠加在图片上Text(中等).fontSize(12).fontColor(Color.White).backgroundColor($r(app.color.warning_color)).padding({left:10,right:10,top:4,bottom:4}).borderRadius(10).position({top:8,right:8});// 绝对定位}.width(100%).height(140);3.4 Flex - 弹性布局Flex 提供了更灵活的布局控制Flex({direction:FlexDirection.Row,// 主轴方向wrap:FlexWrap.Wrap,// 是否换行justifyContent:FlexAlign.Center,// 主轴对齐alignItems:ItemAlign.Center,// 交叉轴对齐}){Text(标签1).padding(8).backgroundColor(#E8F5E9).borderRadius(4);Text(标签2).padding(8).backgroundColor(#E3F2FD).borderRadius(4);Text(标签3).padding(8).backgroundColor(#FFF3E0).borderRadius(4);}四、基础组件4.1 Text - 文本ArkUI 中最常用的文本组件// 基本用法Text(徒步迹).fontSize(24)// 字号.fontWeight(FontWeight.Bold)// 加粗.fontColor($r(app.color.primary_color));// 取色// 多行文本Text(这是一条风景优美的徒步路线沿途经过森林和溪流).fontSize(14).fontColor($r(app.color.text_secondary)).maxLines(2)// 最多2行.textOverflow({overflow:TextOverflow.Ellipsis});// 溢出省略// 富文本部分样式Text(){Span(徒步)// 内联片段.fontSize(16).fontColor($r(app.color.primary_color));Span(迹).fontSize(20).fontColor($r(app.color.accent_color));}4.2 Image - 图片// 加载资源图片Image($r(app.media.app_icon)).width(100).height(100).borderRadius(16).objectFit(ImageFit.Cover);// 裁剪模式// 加载网络图片需申请网络权限Image(https://example.com/photo.jpg).width(100%).height(200).objectFit(ImageFit.Cover);4.3 Button - 按钮// 文本按钮Button(开始徒步).width(200).height(48).backgroundColor($r(app.color.primary_color)).borderRadius(24).fontColor(Color.White).fontSize(16).onClick((){console.log(开始记录轨迹);});// 自定义内容按钮Button(){Row(){Image($r(app.media.app_icon)).width(18).height(18);Text(创建团队).fontSize(14).fontColor(Color.White);}.alignItems(HorizontalAlign.Center);}.width(90%).height(44).backgroundColor($r(app.color.primary_color)).borderRadius(22);4.4 TextInput - 文本输入框// 普通输入TextInput({placeholder:请输入手机号}).width(100%).height(48).backgroundColor(#F5F5F5).borderRadius(12).padding({left:16}).type(InputType.PhoneNumber)// 输入类型.maxLength(11)// 最大长度.onChange((value:string){console.log(输入:${value});});// 密码输入TextInput({placeholder:请输入密码}).width(100%).height(48).backgroundColor(#F5F5F5).borderRadius(12).padding({left:16}).type(InputType.Password)// 密码类型.showPasswordIcon(true);// 显示密码切换五、列表组件5.1 ForEach - 循环渲染Stateroutes:HikingRoute[][{id:1,name:香山徒步},{id:2,name:奥森公园},{id:3,name:百望山},];build(){Column(){ForEach(this.routes,(route:HikingRoute){Text(route.name).fontSize(16).padding(12).width(100%);},(route:HikingRoute)route.id.toString());}}5.2 List - 高效长列表List(){ForEach(this.routes,(route:HikingRoute){ListItem(){RouteCard({route:route});}},(route:HikingRoute)route.id.toString());}.divider({strokeWidth:1,color:#EEE})// 分割线.edgeEffect(EdgeEffect.Spring);// 弹性效果六、修饰符与链式调用ArkUI 采用链式调用来设置组件属性这是最常用的编程模式// 单行链式Text(徒步迹).fontSize(20).fontColor(#4CAF50).fontWeight(FontWeight.Bold);// 多行链式推荐可读性更好Text(徒步迹).fontSize(20).fontColor($r(app.color.primary_color)).fontWeight(FontWeight.Bold).margin({top:12,bottom:12}).padding({left:16,right:16}).backgroundColor(#F5F5F5).borderRadius(8).textAlign(TextAlign.Center).width(100%);七、实战徒步迹首页概览卡片综合运用所学组件实现徒步迹首页的今日概览卡片Componentstruct TodayOverview{Propsteps:number0;Propdistance:number0;Propcalories:number0;build(){Column(){Text(今日概览).fontSize(16).fontWeight(FontWeight.Medium).width(100%);Row(){// 步数Column(){Text().fontSize(28);Text(${this.steps}).fontSize(22).fontWeight(FontWeight.Bold);Text(步).fontSize(12).fontColor(#999);}.alignItems(HorizontalAlign.Center).layoutWeight(1);// 距离Column(){Text().fontSize(28);Text(${this.distance.toFixed(1)}).fontSize(22).fontWeight(FontWeight.Bold);Text(km).fontSize(12).fontColor(#999);}.alignItems(HorizontalAlign.Center).layoutWeight(1);// 卡路里Column(){Text().fontSize(28);Text(${this.calories}).fontSize(22).fontWeight(FontWeight.Bold);Text(kcal).fontSize(12).fontColor(#999);}.alignItems(HorizontalAlign.Center).layoutWeight(1);}.width(100%).margin({top:16}).padding(12);}.width(100%).padding(16).backgroundColor(Color.White).borderRadius(16);}}// 使用EntryComponentstruct HomePage{build(){Column(){TodayOverview({steps:8642,distance:5.2,calories:320});}.width(100%).height(100%).backgroundColor(#F5F5F5).padding(16);}}这段代码在 App 中的实际效果可以参考项目截图八、总结本文介绍了 ArkUI 的核心基础组件包括 Column、Row、Stack 布局容器Text、Image、Button、TextInput 等基础组件以及 ForEach、List 等列表组件。掌握这些组件后你已经可以构建大部分应用界面。下一篇文章我们将学习 Stage 模型和 UIAbility 的深入应用理解鸿蒙应用的运行机制。下一篇预告鸿蒙原生开发手机徒步迹 - Stage 模型与UIAbility详解有问题欢迎在评论区交流探讨。

相关新闻

TinyML实战:19KB火焰检测模型在GD32上的低功耗部署

TinyML实战:19KB火焰检测模型在GD32上的低功耗部署

2026/7/14 2:26:44

1. 项目概述:当机器学习缩微成一粒米,边缘设备就拥有了“思考”能力TinyML(微型机器学习)不是把云端模型简单剪枝后塞进单片机里糊弄事,而是从数据采集、特征工程、模型架构、训练策略到部署运行的全链路重构。我第一次…

鸿蒙原生开发手机:徒步迹 - ArkTS 语法快速入门

鸿蒙原生开发手机:徒步迹 - ArkTS 语法快速入门

2026/7/14 2:26:44

掌握 ArkTS 核心语法,为开发"徒步迹"打好语言基础一、前言 ArkTS 是鸿蒙原生应用的主要开发语言,它是 TypeScript 的超集,在 TypeScript 的基础上增加了静态类型检查和声明式 UI 编程的支持。与标准的 TypeScript 相比,…

PyTorch到PyTorch Lightning迁移实战:训练循环抽象与生产化落地

PyTorch到PyTorch Lightning迁移实战:训练循环抽象与生产化落地

2026/7/14 2:26:44

1. 这不是“选哪个更好”的选择题,而是“什么时候该换挡”的实操指南我带过六支AI工程团队,从零搭建过三个工业级模型训练平台,也亲手把十多个学术项目从Jupyter Notebook里拖进生产环境。每次新人问我“PyTorch和PyTorch Lightning到底用哪个…

douyin-downloader:构建高效抖音内容管理系统的技术实现方案

douyin-downloader:构建高效抖音内容管理系统的技术实现方案

2026/7/14 13:27:32

douyin-downloader:构建高效抖音内容管理系统的技术实现方案 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback…

Codex 总是修改无关文件?用 AGENTS.md 建立项目规则

Codex 总是修改无关文件?用 AGENTS.md 建立项目规则

2026/7/14 13:27:32

摘要使用 Codex 修改真实项目时,不少开发者都会遇到类似问题:只想修复一个页面,结果它同时调整了公共组件;只想修复一个 Bug,却顺手重构了整个模块;明明项目使用 pnpm,它却生成了 npm 命令。这些…

Godot引擎3D变换操作指南:从基础原理到高效实践

Godot引擎3D变换操作指南:从基础原理到高效实践

2026/7/14 13:27:32

1. 项目概述:从“乱拖”到精准操控刚接触 Godot 4.x 的新手,尤其是从其他引擎转过来的朋友,很容易陷入一个误区:在 3D 视口中,用鼠标左键选中一个节点,然后直接拖拽它的坐标轴(红、绿、蓝箭头&a…

深入理解索引B+树的基本原理

深入理解索引B+树的基本原理

2026/7/14 13:27:32

目录 1. 引言 2. 为什么要使用索引? 3. 索引的概述 4. 索引的优点是什么? 4.1 降低数据库的IO成本,提高数据查找效率 4.2 保证数据库每一行数据的唯一性 4.3 加速表与表之间的连接 4.4 减少查询中分组与排序的执行时间 5. 索引的缺点…

酷安UWP:Windows桌面端畅享酷安社区的终极指南

酷安UWP:Windows桌面端畅享酷安社区的终极指南

2026/7/14 13:27:32

酷安UWP:Windows桌面端畅享酷安社区的终极指南 【免费下载链接】Coolapk-UWP 一个基于 UWP 平台的第三方酷安客户端 项目地址: https://gitcode.com/gh_mirrors/co/Coolapk-UWP 想在Windows电脑上体验完整的酷安社区吗?酷安UWP客户端为你提供了完…

Pygame背景音乐循环播放:从原理到实战的完整指南

Pygame背景音乐循环播放:从原理到实战的完整指南

2026/7/14 13:17:32

1. 项目概述:为什么游戏离不开背景音乐循环?如果你用Python和Pygame做过小游戏,肯定遇到过这个问题:游戏跑起来了,画面动起来了,但总觉得少了点什么。对,就是声音。一个没有背景音乐的游戏&…

Unity游戏文本翻译架构深度解析:XUnity.AutoTranslator的技术实现与工程实践

Unity游戏文本翻译架构深度解析:XUnity.AutoTranslator的技术实现与工程实践

2026/7/14 10:03:09

Unity游戏文本翻译架构深度解析:XUnity.AutoTranslator的技术实现与工程实践 【免费下载链接】XUnity.AutoTranslator 项目地址: https://gitcode.com/gh_mirrors/xu/XUnity.AutoTranslator XUnity.AutoTranslator作为Unity游戏社区中最成熟的文本翻译解决方…

openEuler Raspberry Pi Kernel设备驱动开发指南:为树莓派硬件添加支持

openEuler Raspberry Pi Kernel设备驱动开发指南:为树莓派硬件添加支持

2026/7/13 20:43:19

openEuler Raspberry Pi Kernel设备驱动开发指南:为树莓派硬件添加支持 【免费下载链接】raspberrypi-kernel It provides openEuler kernel source for Raspberry Pi 项目地址: https://gitcode.com/openeuler/raspberrypi-kernel 前往项目官网免费下载&…

openEuler系统集成测试实战:基于smoke-test套件的环境验证技巧

openEuler系统集成测试实战:基于smoke-test套件的环境验证技巧

2026/7/13 20:43:10

openEuler系统集成测试实战:基于smoke-test套件的环境验证技巧 【免费下载链接】integration-test The repo contains test suits for system integration test 项目地址: https://gitcode.com/openeuler/integration-test 前往项目官网免费下载:…

XUnity.AutoTranslator 游戏实时翻译插件:从原理到实战的完整指南

XUnity.AutoTranslator 游戏实时翻译插件:从原理到实战的完整指南

2026/7/14 0:06:37

1. 项目概述:当游戏语言成为一堵墙作为一名玩了十几年日系、欧美独立游戏的“老油条”,我太懂那种面对一款心仪已久、画风玩法都戳中G点的游戏,却因为语言不通而望而却步的痛了。尤其是那些基于Unity引擎开发的、体量不大但内容精良的作品&am…

2026普通文员学数据分析的价值

2026普通文员学数据分析的价值

2026/7/14 0:06:37

一、2026年普通文员学习数据分析的必要性随着数字化转型加速,数据分析技能正逐渐成为职场基础能力。普通文员学习数据分析可以提升工作效率、增强竞争力,并为职业转型提供更多可能性。二、数据分析对文员的价值自动化办公:通过数据分析工具&a…

2026从计划员到主管,生产管理者学数据分析有用吗?

2026从计划员到主管,生产管理者学数据分析有用吗?

2026/7/14 0:06:37

一、生产管理领域的职业发展路径 从计划员到主管的角色转变,是生产管理者职业发展的典型路径。计划员主要负责生产排程、库存管理和资源协调等基础工作,而主管则需要承担团队管理、决策支持和效率优化等更高级别的职责。这种转变不仅仅是职位的提升&…