学习笔记
Java基础相关
JVM内存模型及线程空间
动态代理
java并发编程
Java中Future
移动端相关
杂乱整理
HarmonyOS 鸿蒙开发知识
ArkTS中如何自定义组件和复用统一样式
开发工具相关
Git cmd学习整理
Markdown用法大全集
【2023年12月】工作常用
Git如何单独合并某次提交到另一个分支
前端开发相关
Node+TypeScript相关记录
TypeScript 读写 MariaDB
Node TypeScript项目 token生成、管理及拦截校验的实现
TypeScript+Express创建和实现一个服务示例
Express接口处理器抽取注册方式
Express 实现 RESTful API
创建 TypeScript Express 项目,并配置直接用 npm start 运行
TypeScript + Express 实现文件下载接口
export 和 export default的区别
TypeScript+Express 实现用户注册和登录接口
TypeScript 和 JavaScript 中,`===` 和 `==`
CSS中的尺寸大小标准
小程序px和rpx
使用Python快速处理Excel的合并拆分
读书写作相关
一些句子01
李敖语录
罗翔老师的一些经典语句
周易相关知识
周易是对自然描述还是为自然立法
40句落寞诗词,穿透柔魂弱魄
杂玩整理
黑苹果睿频问题
基于纯Linux自己部署Nas构思
Ubuntu换源
Ubuntu挂载tf卡
Ubuntu运行Docker报错
Ubuntu安装运行Docker报错处理
官方镜像安装Docker
Docker 设置root dir 切换数据到其他存储位置
systemctl stop docker 报错
NextCloud安装ffmpeg 显示视频缩略图
Docker源不生效解决方式
Docker源不生效解决方式II——搭建docker-hub镜像
搞定群晖总Docker部署gitea启用ssh协议
MacOS一键安装命令软件列表
群晖ssl证书目录
Android通过ADB命令播放视频
Java基础知识
精选网站
有声主播知识
学习笔记
有声主播入门到进阶
有声主播新手的入门练手内容推荐
DeepSeek分析喜马拉雅旗下 喜播平台 的有声主播培训
录书设备资料1
典故专辑资料整理
0B. 脚本和大纲
01. 柳赠别——灞桥烟雨中的离愁
0A. 前置准备资料
Ai大数据模型
模型整理
使用 DeepSeek 通用公式
学会这8招,让DeepSeek变得超好用!
大数据购物分析选优
Windows和Ubuntu部署DeepSeek性能差距
本地部署 Ollam+DeepSeek 探索爬坑
模型对比测试
AI模型使用心得
小说创作需求说明书
-
+
首页
ArkTS中如何自定义组件和复用统一样式
在鸿蒙的 **ArkTS** 中,**自定义组件**和**统一声明样式**可以通过以下方式实现: ### 一、自定义组件 1. **基本结构** 使用 `@Component` 装饰器定义组件,并在 `build` 方法中返回 UI 结构: ```JavaScript @Component struct MyButton { // 可定义组件属性 private text: string = 'Click Me' build() { Column() { Button(this.text) .onClick(() => { console.log('Button clicked!') }) } } } ``` **使用组件**: ```JavaScript MyButton() // 直接通过组件名调用 ``` 2. **添加动态属性** 通过 `@Prop` 或 `@Link` 装饰器接收父组件传递的变量: ```JavaScript @Component struct MyButton { @Prop text: string // 父组件传递的文本 build() { Button(this.text) } } ``` --- ### 二、统一样式声明 #### 1. 使用 `@Styles` 装饰器 定义可复用的内联样式块,支持 **全局样式** 或 **组件私有样式**。 - **全局样式**(定义在组件外,任意组件可调用): ```JavaScript @Styles function globalFancyStyle() { .width(100) .height(40) .backgroundColor('#007DFF') .borderRadius(8) } @Component struct MyComponent { build() { Button('Submit') .globalFancyStyle() // 应用全局样式 } } ``` - **组件私有样式**(定义在组件内): ```JavaScript @Component struct MyComponent { @Styles fancyText() { .fontColor('#FF9900') .fontSize(20) .fontWeight(FontWeight.Bold) } build() { Text('Hello') .fancyText() // 调用私有样式 } } ``` #### 2. 使用 `@Extend` 扩展内置组件 为系统组件(如 `Text`、`Button`)定义全局统一的扩展样式: ```typescript @Extend(Text) function titleStyle() { .fontSize(24) .fontColor('#333333') .margin({ bottom: 10 }) } // 在组件中使用 Text('标题') .titleStyle() // 所有标题统一风格 ``` #### 3. 定义样式常量+链式调用 通过抽取样式属性到常量对象,实现逻辑与样式的解耦: ```JavaScript // 定义样式常量 const ThemeStyles = { mainColor: '#007DFF', text: { normal: { fontSize: 16, fontColor: '#666666' }, title: { fontSize: 24, fontColor: '#333333' } } } // 在组件中应用 Text('正文内容') .fontSize(ThemeStyles.text.normal.fontSize) .fontColor(ThemeStyles.text.normal.fontColor) ``` --- ### 三、结合 `@Builder` 实现复杂样式复用 通过 `@Builder` 定义更复杂的 UI 片段,并复用它: ```JavaScript @Builder function FancyCard(title: string, content: string) { Column() { Text(title) .titleStyle() // 复用 @Extend 的标题样式 Text(content) .fontSize(16) .padding(10) .backgroundColor('#F5F5F5') } .padding(20) .borderRadius(12) } // 调用 FancyCard('标题', '这里是卡片内容') ``` --- ### 四、使用主题配置全局变量 在 `App.ets` 或全局文件中定义主题变量,实现全局样式管理: ```JavaScript export class AppTheme { static readonly COLOR_PRIMARY: string = '#007DFF' static readonly FONT_TITLE: number = 24 } // 组件中引用 Text('标题') .fontSize(AppTheme.FONT_TITLE) .fontColor(AppTheme.COLOR_PRIMARY) ``` --- ### 总结 - **自定义组件**:通过 `@Component` 定义,使用 `build()` 构建 UI。 - **统一样式**: - `@Styles`:定义可复用的内联样式(全局或私有)。 - `@Extend`:扩展内置组件样式,统一修改默认风格。 - 常量对象:集中管理颜色、字体等变量。 - `@Builder`:封装复杂样式块,复用 UI 片段。 - 全局主题:通过常量类统一管理应用级样式变量。
嘿手大叔
2025年4月27日 19:51
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
分享
链接
类型
密码
更新密码