【HarmonyOS】ArKUI框架
目录
概述
声明式开发范式
基于ArKUI的项目
• 1.创建资源文件
• 2.引用资源
• 3.引用系统资源:
• 系统资源有哪些
• 4. 在配置和资源中引用资源
声明式语法
UI描述规范
UI组件概述
组件化
组件渲染控制语法
修改应用名称和图标
概述
• 在HarmonyOS应用开发中,前期官方推出了 两种UI开发框架• 一个是基于Java的UI开发框架- 已经废弃• 一个是基于 ArkTS 的UI开发框架• 在 基于ArkTS的UI开发框架 中,应用包括 组件 和 页面 ,组件是界面搭建与显示的最小单位,通过组件的组合可以构建出内容丰富的界面,页面(Page)是框架最小的调度分割单位,应用可以有多个功能页面,每个页面进行单独的文件管理,并通过路由API实现页面跳转和调度管理
声明式开发范式
• 基于ArkTS声明式开发范式具有以下 主要特点 :• 1) 开箱即用的组件 :框架提供丰富的系统预置组件,可以通过链式调用的方式设置系统组件的渲染效果。开发者可以组合系统组件为自定义组件,通过这种方式将页面组件化为一个个独立的UI单元,实现页面不同单元的独立创建、开发和复用,使页面具有更强的工程性。• 2) 丰富的动效接口 :提供s vg标准的绘制图形能力,同时开放了丰富的动效接口,开发者可以通过封装的物理模型或者调用动画能力接口来实现自定义动画轨迹。• 3) 状态与数据管理 :状态数据管理作为基于A rkTS的声明式开发范式的特色,通过功能不同的装饰器给开发者提供了清晰的页面更新渲染流程和管道。状态管理包括UI组件状态和应用程序状态,两者协作可以使开发者完整地构建整个应用的数据更新和UI渲染。• 4) 系统能力接口 :使用基于A rkTS的声明式开发范式的方舟开发框架,还封装了丰富的系统能力接口,开发者可以通过简单的接口调用,实现从UI设计到系统能力调用的极简开发。
基于ArKUI的项目

| 分类 | base目录 | 限定词目录 | rawfile目录 |
| 组织形式 | 资源默认存在的目录,当应用的resources目录中没有与设备状态匹配的限定词目录时,会自动引用该目录中的资源文件。base目录下可以有资源组目录,用于存放字符串、颜色、布尔值、媒体、动画、布局等资源文件 | 需要开发者自行创建。目录名称由一个或多个表征应用场景或设备特征的限定词组合而成。其二级子目录为资源组目录,用于存放字符串、颜色、布尔值、媒体、动画、布局等资源文件 | 原始文件目录,其中的文件不会根据设备状态而匹配不同的资源。支持创建多层子目录,目录名称可以自定义,文件内可以自由放置各类资源文件 |
| 编译方式 | 目录中的资源文件会被编译成二进制文件,并赋予资源ID | 目录中的资源文件会被编译成二进制文件,并赋予资源文件ID | 目录中的资源文件会被直接打包进应用,不编译,也不会被赋予资源文件ID |
| 引用方式 | 通过指定资源类型(type)和资源名称(name)来引用 | 通过指定资源类型(type)和资源名称(name)来引用 | 通过指定文件路径和文件名来引用 |
| 资源组目录 | 目录说明 | 资源文件 |
| element | 元素资源,每一类数据都采用相应的JSON文件进行表示,元素主要包 括以下类型资源:布尔型、颜色、浮点型、整型数组、整型、样式、复数形式、字符串数组、字符串 | 每个文件中只能包含一类数据资 源,文件名称建议与资源类型保持一致。如:boolean.json、 color.json、float.json、 intarray.json、integer.json、 pattern.json、plural.json、 strarray.json、string.json |
| media | 表示媒体资源,包括图片、音频、 视频等非文本格式的文件。图片格 式支持JPEG、PNG、GIF、SVG、WEBP 、BMP。音视频格式支持H.263、 H.264 AVC、BP、MPEG-4 SP、VP8。 | 文件名可自定义,一般扩展名对 应相应的格式,例如:icon.png 、pic.jpg、song.3gp、 movie.mp4等 |
| profile | 表示其它类型文件,以原始文件形 式保存。 | 文件名可自定义。 |
• 1.创建资源文件
{
"string": [
{
"name": "entrydesc",
"value": "description"
},
{
"name": "MainAbilitydesc",
"value": "description"
},
{
"name": "MainAbilitylabel",
"value": "label"
}
]
} • 2.引用资源
$r('app.string.entrydesc')
$r("app.string.entrydesc") // 单双引号相同
$r('app.string.message', "100M") //替代参数%s {
"string":[
{
"name":"message",
"value":"The length is %s."
}
]
} $r('filename')
$rawfile('images/logo.jpg') • 3.引用系统资源:
Text('您好')
.fontColor($r('sys.color.id_color_emphasize'))
.fontSize($r('sys.float.id_text_size_headline1'))
.fontFamily($r('sys.string.id_text_font_family_medium'))
.backgroundColor($r('sys.color.id_color_palette_aux1'))
Image($r('sys.media.ic_app'))
.border({color: $r('sys.color.id_color_palette_aux1'),
radius: $r('sys.float.id_corner_radius_button'),
width: 2})
.height(60)
.width(80) • 系统资源有哪些
| 分类 | ID值 | 说明 |
| 颜色 | id_color_foreground | 前景色,浅色模式对应值为#000000,即黑色,深色模式对应值为#FFFFFF,即白色 |
| id_color_background | 背景色,和前景色恰好相反 | |
| id_color_emphasize | 高亮色,浅色模式对应值为#0A59F7,蓝色,深色模式下对应的浅蓝色,值为#317AF7 | |
| id_color_warning | 告警色,浅色模式对应值为#E84026,一种红色,深色模式下,对应的是值为#D94838 | |
| ... | 其它还有很多,这里省略了 | |
| 透明度 | id_alpha_content_primary | 不透明度,对应的alpha值为在浅色模式下是0.9,深色模式下是0.86 |
| id_alpha_content_secondary | 二级不透明度,对应的alpha值为0.6 | |
| id_alpha_separator_line | 分割线不透明,在浅色模式下对应的alpha值为0 | |
| ... | 其它还有很多,这里省略了 | |
| 圆角大小 | id_corner_radius_tips_toast | toast圆角,对应值为18vp |
| id_corner_radius_button | 大按钮圆角,对应值为20vp | |
| id_corner_radius_small_button | 小按钮圆角,对应值为14vp | |
| ... | 其它还有很多,这里省略了 | |
| 文本大小 | id_text_size_headline1 | 标题1字体,对应大小为96vp,常用于锁屏时钟或天气信息显示字体 |
| id_text_size_body1 | 正文1字体,对应大小为16fp,一般用于段落正文 | |
| id_text_size_caption | 说明文本大小,对应大小为10vp | |
| ... | 其它还有很多,这里省略了 | |
| 边距大小 | id_default_padding_start | 默认的起始位置内边距,对应的值为12vp,常用于左侧边缘 |
| id_default_padding_top | 上侧边距,对应值为24vp | |
| id_text_margin_vertical | 文本上下间隔边距,对应值为2vp | |
| .. | 其它还有很多,这里省略了 |
• 4. 在配置和资源中引用资源
声明式语法
UI描述规范

UI组件概述
@Entry //入口装饰器
@Component //组件装饰器
struct MyIndexComponent {
@State mydata: string = '' //状态数据
build() { //生成器函数
//省略了构造内部组件
}
}
@Component
struct OtherComponent {
@State msg: string = ''
build() {
//构造内部组件
}
} | 装饰器 | 可以装饰内容 | 说明 |
| @Component | struct | 结构体(struct)在被装饰后具有基于组件的能力,需要实现build方法来更新UI |
| @Entry | struct | 组件在被装饰后会作为页面的入口组件,页面加载时将被渲染显示 |
| @Preview | struct | 自定义的组件被@Preview装饰,则可以在DevEco Studio的预览器中进行预览 |
| @CustomDialog | struct | 用于装饰自定义弹窗 |
| @Observed | class | 类被装饰后,则该类中的数据变更被UI页面管理 |
| @ObjectLink | 已被@Observed装饰类的对象 | 被装饰的状态数据被修改时,则在父组件或者其它兄弟组件内与它关联的状态数据所在的组件都会更新UI |
| @Builder | 方法 | 被装饰的方法可以在一个自定义组件内快速生成多个布局内容 |
| @Extend | 方法 | 装饰器将新的属性函数添加到内置组件上,通过@Extend装饰器可以快速定义并复用组件的自定义样式 |
| @Prop | 基本数据类型 | 装饰的状态数据用于在父组件和子组件之间建立单向数据依赖关系。修改父组件关联数据时,更新当前组件的UI |
| @State | 基本数据类型,类,数组 | 装饰的状态数据被修改时会触发组件的build方法进行UI界面更新 |
| @Link | 基本数据类型,类,数组 | 装饰的内容在父子组件之间的双向数据绑定,父组件的内部状态数据作为数据源,任何一方所做的修改都会反映给另一方 |
| @Provid | 基本数据类型,类,数组 | 装饰的数据作为数据的提供方,可以更新其子孙节点的数据,并触发页面渲染 |
| @Consume | 基本数据类型,类,数组 | 装饰的变量在感知到@Provide装饰的变量更新后,会触发当前自定义组件的重新渲染 |
@Entry //入口装饰器
@Component //组件装饰器
struct Index{
bt_text: string = '确定'
build() {
Row() { //创建行布局
Text( "您好" ) //创建文本组件
.fontSize(50)
Button(this.bt_text) //创建按钮组件
.fontSize(30)
.margin(10)
MyComponent () //创建自定义组件
}
}
}
// 自定义组件
@Component
struct MyComponent {
build() {
//构建布局和组件
}
}
Row() { //构造Row布局
Image('button.png') //构造Image
.alt('over.png') //调用alt方法
.width(100) //调用width
.height(50) //调用height
}.padding(16) //设置Row的内边距 Button('OK')
.onClick(()=>{
//点击处理代码
})
) @Entry //入口装饰器
@Component //组件装饰器
struct Index{
test(){
return "OK"
}
build() {
let n: number = 1 // 错误,不允许定义变量
test() // 错误,不能直接调用函数
Column() {
Text( this.test() ) // 这里可以调用test
}
}
} 组件化

@Component // 组件装饰器
struct MyComponent { // 自定义组件
build() {
Column() { // 列容器组件
Text('Hello') // 文本组件,文字为Hello
.fontColor(Color.Red) // 字体红色
}.alignItems(HorizontalAlign.Center) // 内容居中
}
}
@Component
struct OtherComponent {
build() {
Column() {
MyComponent() //创建MyComponent 实例
Text('Hello').fontSize(20)//使用系统内置组件Text
MyComponent() //再次创建MyComponent 实例
}
}
} @Entry
@Component
struct Index{ //该组件会被渲染和显示
build() {
Column() { //Column是系统内置容器组件
Text('Hello')
.fontColor(Color.Red)
}
}
}
@Component
struct MyText { //该组件不会被渲染和显示,但可以被引用
build() {
Column() {
Text('Good')
.fontColor(Color.Blue)
}
}
} @Entry
@Component
struct Index {
mySize : number = 10;
@Builder // Builder装饰器
SquareText(title: string) { // 该方法可以在build中被调用
Text(title)
.width( this.mySize )
.height( this.mySize )
}
build() {
Column() {
Row() {
this.SquareText("A") // 调用被Builder装饰的方法
this.SquareText("B") // 调用被Builder装饰的方法
}
}
}
} @Styles //通过@Styles装饰
function yourBGStyle() {
.backgroundColor(Color.Green)
}
@Entry
@Component
struct Test {
@Styles myBGStyle() { //省略了function关键字
.backgroundColor(Color.Blue)
}
build() {
Column({ space: 10 }) {
Text("您好")
.yourBGStyle()
Text("我的")
.myBGStyle()
}
}
} @Extend(Text) //扩展Text
function myStyle(fontSize: number) {
.fontColor(Color.Red)
.fontSize(fontSize)
.fontStyle(FontStyle.Italic)
}
@Entry
@Component
struct Test {
build() {
Row( ) {
Text("您好")
.myStyle(16) // 调用扩展的功能
}
}
} 组件渲染控制语法
@Entry
@Component
struct Test {
count:number = 100
build() {
Column() { //容器组件
if (this.count < 0) {
Text('count为负数')
} else if (this.count == 0) {
Text('ccount为0')
} else { //内部嵌套if-else
if ( this.count % 2 == 0) {
Text('count是偶数').fontSize(26)
Divider().height(1)
} else {
Text('count是奇数').fontSize(26)
Divider().height(1)
}
}
}
if(this.count>100){ //错误,没有在组件容器内
Text('count超出了100')
}
}
}
@Entry
@Component
struct MyComponent {
@State arr: string[] = ['张三', '李四', '王五']
build() {
Column() {
ForEach(
this.arr, // 参数1:数组
(item: string, index: number) => { //参数2:迭代器函数
Row() {
Text(`下标: ${index}`)
Text(`姓名:${item}`)
},
(item: string, index: number) => { //参数3:迭代器函数
return index + item //为每个数组项生成唯一
} //且持久的键值,可不写
)
}
}
} 修改应用名称和图标
- 基于ArkTS的声明式UI开发框架ArkUI,含有ArkUI的HarmonyOS应用一般包含多个能力(Ability)。
- PageAbility可以包含多个页面(Page),每个页面对应一个ets文件,每个页面内部可以包含多个组件,其中必须有且只有一个入口(Entr y)组件,组件可以嵌套,形成组件树,加以利用项目中的各种文本、图片、音视频等资源,进而构建丰富的界面。
- 基于ArkTS语言的声明式语法提供了开发HarmonyOS应用的基本规范,规范中定义了大量的装饰器,为应用提供高效的开发基础,
- UI界面构成采用的组件化方式,组件可以进行条件渲染和循环渲染等。
相关文章:
【HarmonyOS】ArKUI框架
目录 概述 声明式开发范式 基于ArKUI的项目 • 1.创建资源文件 • 2.引用资源 • 3.引用系统资源: • 系统资源有哪些 • 4. 在配置和资源中引用资源 声明式语法 UI描述规范 UI组件概述 组件化 组件渲染控制语法 修改…...
使用 Nacos 的注意事项与最佳实践
📹 背景 Nacos 凭借其强大💪的服务发现、配置管理和服务管理能力,成为构建分布式系统的得力助手。然而,要充分发挥 Nacos 的优势,实现系统的高性能、高可用,掌握其使用过程中的注意事项和最佳实践至关…...
Megatron - LM 重要文件解析 - /tools/preprocess_data.py
preprocess_data.py 的主要功能。这是 Megatron-LM 的数据预处理脚本,主要用于将原始文本数据转换为模型训练所需的格式。 核心功能: 1. 数据预处理流程: 输入:原始文本文件(JSON格式) 处理:…...
计算机网络八股——HTTP协议与HTTPS协议
目录 HTTP1.1简述与特性 1. 报文清晰易读 2. 灵活和易于扩展 3. ⽆状态 Cookie和Session 4. 明⽂传输、不安全 HTTP协议发展过程 HTTP/1.1的不足 HTTP/2.0 HTTP/3.0 HTTPS协议 HTTP协议和HTTPS协议的区别 HTTPS中的加密方式 HTTPS中建立连接的方式 前言ÿ…...
Unitest和pytest使用方法
unittest 是 Python 自带的单元测试框架,用于编写和运行可重复的测试用例。它的核心思想是通过断言(assertions)验证代码的行为是否符合预期。以下是 unittest 的基本使用方法: 1. 基本结构 1.1 创建测试类 继承 unittest.TestC…...
常用python爬虫框架介绍
文章目录 前言1. Scrapy2. BeautifulSoup 与 Requests 组合3. Selenium4. PySpider 前言 Python 有许多优秀的爬虫框架,每个框架都有其独特的特点和适用场景。以下为你详细介绍几个常用的 Python 爬虫框架: Python 3.13.2 安装教程(附安装包…...
AI大模型:(二)2.3 预训练自己的模型
目录 1.预训练原理 2.预训练范式 1.未标注数据 2.标注数据 3.有正确答案、也有错误答案 3.手撕transform模型 3.1.transform模型代码 3.2.训练数据集 3.3.预训练 3.4.推理 4.如何选择模型 5.如何确定模型需要哪种训练 大模型预训练(Large-scale Pre-training…...
webpack基础使用了解(入口、出口、插件、加载器、优化、别名、打包模式、环境变量、代码分割等)
目录 1、webpack简介2、简单示例3、入口(entry)和输出(output)4、自动生成html文件5、打包css代码6、优化(单独提取css代码)7、优化(压缩过程)8、打包less代码9、打包图片10、搭建开发环境(webpack-dev-server…...
数字后端设计 (四):时钟树综合——让芯片的「心跳」同步到每个角落
—— 试想全城的人要在同一秒按下开关——如果有的表快、有的表慢,结果会乱套!时钟树综合就是给芯片内部装一套精准的“广播对时系统”,让所有电路踩着同一个节拍工作。 1. 为什么时钟如此重要? 芯片的「心跳」:时钟信…...
微信小程序 van-dropdown-menu
点击其他按钮,关闭van-dropdown-menu下拉框 DropdownMenu 引入页面使用index.wxmlindex.scssindex.ts(重点)index.ts(全部) DropdownMenu 引入 在app.json或index.json中引入组件 "usingComponents": {"van-dropdown-menu": "vant/weapp…...
智驱未来:AI大模型重构数据治理新范式
第一章 数据治理的进化之路 1.1 传统数据治理的困境 在制造业巨头西门子的案例中,其全球200个工厂每天产生1.2PB工业数据,传统人工清洗需要300名工程师耗时72小时完成,错误率高达15%。数据孤岛问题导致供应链决策延迟平均达48小时。 1.2 A…...
2025-04-22| Docker: --privileged参数详解
在 Docker 中,--privileged 是一个运行容器时的标志,它赋予容器特权模式,大幅提升容器对宿主机资源的访问权限。以下是 --privileged 的作用和相关细节: 作用 完全访问宿主机的设备: 容器可以访问宿主机的所有设备&am…...
[创业之路-380]:企业法务 - 企业经营中,企业为什么会虚开増值税发票?哪些是虚开増值税发票的行为?示例?风险?
一、动机与风险 1、企业虚开增值税发票的动机 利益驱动 骗抵税款:通过虚开发票虚增进项税额,减少应纳税额,降低税负。公司套取国家的利益。非法套现:虚构交易开具发票,将资金从公司账户转移至个人账户,用…...
C++ 蓄水池抽样算法
(1)概念 蓄水池抽样算法(Reservoir Sampling)是一种用于从 大规模数据集(尤其是 流式数据 或 无法预先知晓数据总量 的场景)中 等概率随机抽取固定数量样本 的算法。 (2)实现 我们…...
uniapp-x 二维码生成
支持X,二维码生成,支持微信小程序,android,ios,网页 - DCloud 插件市场 免费的单纯用爱发电的...
蓝桥杯算法实战分享:C/C++ 题型解析与实战技巧
蓝桥杯全国软件和信息技术专业人才大赛,作为国内知名的算法竞赛之一,吸引了众多编程爱好者参与。在蓝桥杯的赛场上,C/C 因其高效性和灵活性,成为了众多选手的首选语言。本文将结合蓝桥杯的赛制特点、常见题型以及实战案例…...
分布式光纤测温技术让森林火灾预警快人一步
2025年春季,多地接连发生森林火灾,累计过火面积超 3万公顷。春季历来是森林草原火灾易发、多发期,加之清明节已到来,生产生活用火活跃,民俗祭祀用火集中,森林火灾风险进一步加大。森林防火,人人…...
Vue2 el-checkbox 虚拟滚动解决多选框全选卡顿问题 - 高性能处理大数据量选项列表
一、背景 在我们开发项目中,经常会遇到需要展示大量选项的多选框场景,比如权限配置、数据筛选等。当选项数量达到几百甚至上千条时,传统的渲染方式全选时会非常卡顿,导致性能问题。本篇文章,记录我使用通过虚拟滚动实现…...
KUKA机器人KR 3 D1200 HM介绍
KUKA KR 3 D1200 HM是一款小型机器人,型号中HM代表“Hygienic Machine(卫生机械)用于主副食品行业”,也是一款并联机器人。用于执行高速、高精度的抓取任务。这款机器人采用食品级不锈钢设计,额定负载为3公斤ÿ…...
linux驱动---视频播放采集架构介绍
lcd驱动框架(图像显示) 图像显示基础 1. 核心组件架构 用户空间 ------------------------------------------ | X11/Wayland | FBDEV应用 | DRM/KMS应用 | ------------------------------------------ 内核空间 --------------------------------…...
【MATLAB第117期】#源码分享 | 基于MATLAB的SSM状态空间模型多元时间序列预测方法(多输入单输出)
【MATLAB第117期】#源码分享 | 基于MATLAB的SSM状态空间模型多元时间序列预测方法(多输入单输出) 引言 本文使用状态空间模型实现失业率递归预测,状态空间模型(State Space Model, SSM)是一种用于描述动态系统行为的…...
状态管理最佳实践:Riverpod响应式编程
状态管理最佳实践:Riverpod响应式编程 引言 Riverpod是Flutter生态系统中一个强大的状态管理解决方案,它通过响应式编程的方式提供了更加灵活和可维护的状态管理机制。本文将深入探讨Riverpod的核心概念、实践应用以及性能优化技巧。 核心概念 Provi…...
【Linux】线程ID、线程管理、与线程互斥
📚 博主的专栏 🐧 Linux | 🖥️ C | 📊 数据结构 | 💡C 算法 | 🌐 C 语言 上篇文章: 【Linux】线程:从原理到实战,全面掌握多线程编程!-CSDN博客 下…...
python包管理器,conda和uv 的区别
python包管理器,conda和uv 的区别 以下是 conda 和 uv 在 Python 包管理中的深度对比,结合知识库内容进行分析: 1. 核心设计理念 conda 以“环境为中心”,强调跨语言支持(如 Python、R、Julia)和严格的依赖…...
逻辑回归:损失和正则化技术的深入研究
逻辑回归:损失和正则化技术的深入研究 引言 逻辑回归是一种广泛应用于分类问题的统计模型,尤其在机器学习领域中占据着重要的地位。尽管其名称中包含"回归",但逻辑回归本质上是一种分类算法。它的核心思想是在线性回归的基础上添…...
【锂电池SOH估计】RF随机森林锂电池健康状态估计,锂电池SOH估计(Matlab完整源码和数据)
目录 效果一览程序获取程序内容代码分享研究内容基于随机森林(RF)的锂电池健康状态(SOH)估计算法研究摘要1. 引言2. 锂电池SOH评估框架3. 实验与结果分析4. 未来研究方向6. 结论效果一览 程序获取 获取方式一:文章顶部资源处直接下载:【锂电池SOH估计】RF随机森林锂电池…...
【Pytorch 中的扩散模型】去噪扩散概率模型(DDPM)的实现
介绍 广义上讲,扩散模型是一种生成式深度学习模型,它通过学习到的去噪过程来创建数据。扩散模型有很多变体,其中最流行的通常是文本条件模型,它可以根据提示生成特定的图像。一些扩散模型(例如 Control-Net࿰…...
121.在 Vue3 中使用 OpenLayers 实现去掉鼠标右键默认菜单并显示 Feature 信息
🎯 实现效果 👇 本文最终实现的效果如下: ✅ 地图初始化时绘制一个多边形; ✅ 鼠标 右键点击地图任意位置; ✅ 若命中 Feature,则弹出该图形的详细信息; ✅ 移除浏览器默认的右键菜单,保留地图交互的完整控制。 💡 整个功能基于 Vue3 + OpenLayers 完成,采用 Com…...
仓颉造字,亦可造AI代理
CangjieMagic入门教程 本文将为您提供一份关于CangjieMagic代码库的详细入门教程,CangjieMagic托管于GitCode - 全球开发者的开源社区,开源代码托管平台。这是一个基于仓颉编程语言的LLM(大语言模型)Agent开发平台,具有独特的Age…...
进阶篇 第 6 篇:时间序列遇见机器学习与深度学习
进阶篇 第 6 篇:时间序列遇见机器学习与深度学习 (图片来源: Tara Winstead on Pexels) 在上一篇中,我们探讨了如何通过精心的特征工程,将时间序列预测问题转化为机器学习可以处理的监督学习任务。我们学习了如何创建滞后特征、滚动统计特征…...
