学习笔记
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命令播放视频
[完成] 群晖自动更新https证书项目
Java基础知识
精选网站
有声主播知识
学习笔记
有声主播入门到进阶
有声主播新手的入门练手内容推荐
DeepSeek分析喜马拉雅旗下 喜播平台 的有声主播培训
录书设备资料1
典故专辑资料整理
0B. 脚本和大纲
0A. 前置准备资料
Ai大数据模型
模型整理
使用 DeepSeek 通用公式
学会这8招,让DeepSeek变得超好用!
大数据购物分析选优
Windows和Ubuntu部署DeepSeek性能差距
本地部署 Ollam+DeepSeek 探索爬坑
模型对比测试
AI模型使用心得
临时
-
+
home page
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 片段。 - 全局主题:通过常量类统一管理应用级样式变量。
嘿手大叔
April 27, 2025, 7:51 p.m.
转发文档
Collection documents
Last
Next
手机扫码
Copy link
手机扫一扫转发分享
Copy link
Markdown文件
share
link
type
password
Update password