鸿蒙4.0开发笔记之ArkTS装饰器语法基础@Extend扩展组件样式与stateStyles多态样式(十一)
一、Extend扩展组件样式
1、作用
前文提到可以使用@Styles用于样式的扩展,在@Styles的基础上,ArkTS语法还提供了@Extend,⽤于扩展原生组件样式,包括Text、Button等等。
2、定义语法
@Extend(UIComponentName) function functionName { ... }
//UIComponentName表示原生组件,如Text、Button...
//functionName为样式函数名
3、使用规则(和@Styles不同)
- @Extend仅支持定义在全局,不支持在组件内部定义。
- @Extend支持封装指定的组件的私有属性和私有事件和预定义相同组件的@Extend的方法。
- @Extend装饰的方法支持参数,开发者可以在调用时传递参数,调用遵循ts方法传值调用。
@Extend(Text) function makeMeClick(onClick: () => void) {
.backgroundColor(Color.Blue)
.onClick(onClick)
}
@Entry
@Component
struct FancyUse {@State label: string = 'Hello World';onClickHandler() {this.label = 'Hello ArkUI';}build() {Row({ space: 10 }) {Text(${this.label}).makeMeClick(this.onClickHandler.bind(this))}}
}
- @Extend装饰的⽅法的参数可以为function,作为Event事件的句柄。
@Extend(Text) function fancy (fontSize: number) {.fontColor(Color.Red).fontSize(fontSize)
}@Entry
@Component
struct FancyUse {@State fontSizeValue: number = 20build() {Row({ space: 10 }) {Text('Fancy').fancy(this.fontSizeValue).onClick(() => {this.fontSizeValue = 30})}}
}
二、stateStyles多态样式
1、概念
@Styles和@Extend仅仅应用于静态页面的样式复用,stateStyles可以依据组件的内部状态的不同,快速设置不同样式,即多态样式。
2、四种状态
stateStyles是属性方法,可以根据UI内部状态来设置样式,类似于css伪类,但语法不同。ArkUI提供了以下四种状态:
- focused:获焦态。
- normal:正常态。
- pressed:按压态。
- isabled:不可用态。
3、注意
Button处于第⼀个组件,会默认获焦,生效focused下面的属性样式。
三、@Extend与stateStyles练习
1、@Extend练习任务
使用Extend扩展样式对Text和Button两类组件进行渲染,并需要传递相应参数,其中Button组件的参数需要包括一个函数,以实现点击按钮能够将按钮上的数字进行累加。
2、stateStyles练习任务
按压时显示为pressed态指定的红色。如果在Button前再放⼀个组件,使其不处于获焦态,就会生效normal态的橙色。若果在Button前没有组件,则会默认获焦,生效focused态的蓝色。
3、练习代码
@Entry
@Component
struct Index {@State message: string = '@Extend\n扩展样式'//用于按钮计数的状态值@State count: number = 0build() {Row() {Column() {Text(this.message).fontSize(50).fontWeight(FontWeight.Bold).margin({bottom:15})Divider()//调用Extend扩展样式函数Text('取之无禁,').textDefined(40,Color.Brown)Text('用之不竭。').textDefined(30,'green')Text('是造物者之无尽藏也,').textDefined(20,'#00AABB')Text('而吾与子之所共适!').textDefined(40,Color.Red)//对按钮进行Extend扩展函数的调用//错误调用:Button(this.count),必须转为字符串类型Button(this.count.toString()).btnDefined(()=>{this.count++})//多态样式:也是一种属性方法,但是可以同时写不同状态下的属性Button('多态样式').width('90%').fontSize(40).margin({top:15}).stateStyles({normal: {.backgroundColor(Color.Orange)},focused:{.backgroundColor(Color.Blue)},pressed:{.backgroundColor(Color.Red)}})}.width('100%')}.height('100%')}
}//定义文本扩展样式
@Extend(Text) function textDefined(fs:number, fc:Color|string){.fontSize(fs).fontColor(fc).fontWeight(FontWeight.Bold).fontStyle(FontStyle.Italic)
}//定义按钮扩展样式
//自定义组件的参数可以是一个函数
//或者定义为:@Extend(Button) function btnDefined(click:Function){
@Extend(Button) function btnDefined(click:()=>void){.fontSize(50).width(200)//调用传递过来的函数(形式参数).onClick(()=>{click()})
}
4、测试效果

相关文章:
鸿蒙4.0开发笔记之ArkTS装饰器语法基础@Extend扩展组件样式与stateStyles多态样式(十一)
一、Extend扩展组件样式 1、作用 前文提到可以使用Styles用于样式的扩展,在Styles的基础上,ArkTS语法还提供了Extend,⽤于扩展原生组件样式,包括Text、Button等等。 2、定义语法 Extend(UIComponentName) function functionNam…...
5V摄像机镜头驱动IC GC6208,可用于摄像机,机器人等产品中可替代AN41908
GC6208是一个镜头电机驱动IC摄像机和安全摄像机。该设备集成了一个直流电机驱动器的Iris的PID控制系统,也有两个通道的STM电机驱动器的变焦和对焦控制。 芯片的特点: 内置用于Iris控制器的直流电机驱动器 内置2个STM驱动程序,用于缩放和…...
PHP echo和print 语句
PHP 是通过 print 和 echo 语句来动态输出 HTML 内容,虽然 print 和 echo 语句两者的功能几乎是完全一样,但是还是有一点差别的。 在 PHP 中有两个基本的输出方式: echo 和 print。 本章节中我们会详细讨论两个语句的用法,并在实…...
ThinkPHP6.1 多应用模式的一些事儿
TP安装就不说了,直接从安装完成开始了。 安装多应用模式扩展 think-multi-app composer require topthink/think-multi-app删除 app 目录下的 controller 文件夹(TP 是根据是否有这个文件夹来判断单应用模式还是多应用模式的)。 创建应用 …...
redis-cluster集群模式
Redis-cluster集群 1 Redis3.0引入的分布式存储方案 2集群由多个node节点组成,redis数据分布在节点之中,在集群之中分为主节点和从节点3集群模式当中,主从一一对应,数据写入和读取与主从模式一样,主负责写,从只能读4集群模式自带哨兵模式,可…...
带你用uniapp从零开发一个仿小米商场_10. 首页开发
图标菜单栏开发 轮播图开发完成后,就是图标菜单栏了 可以看出这些图标都是一样的样式,所以可以勇哥flex布局让他们每个占百分之20 代码如下,既然都是一样的那就直接用个循环嵌套一下 data数据如下 同样,为了能让这段代码能在别的地方也用到,我直接把它封装成组件 <templ…...
常使用的定时任务
常使用的定时任务 一、 linux自带的定时任务 1、crontab 有这样一个需求:我们使用Java写一个工具jar包在系统空闲的时候去采集已经部署在Linux系统上的项目的一 些数据,可以使用 linux 系统的 crontab。 运行crontab -e,可以编辑定时器&…...
【人工智能Ⅰ】实验2:遗传算法
实验2 遗传算法实验 一、实验目的 熟悉和掌握遗传算法的原理、流程和编码策略,理解求解TSP问题的流程并测试主要参数对结果的影响,掌握遗传算法的基本实现方法。 二、实验原理 旅行商问题,即TSP问题(Traveling Salesman Proble…...
Hadoop集群升级(3.1.3 -> 3.2.4)
升级前确认 旧版本:3.1.3 升级版本:3.2.4 旧版本安装路径:/ddhome/bin/hadoop/ 新版本安装路径:/ddhome/bin/hadoop-3.2.4 安装新版本hadoop 解压安装 # 解压安装包到相应目录下 tar -zxvf /ddhome/tools/hadoop-3.2.4.tar.gz…...
(一)基于高尔夫优化算法GOA求解无人机三维路径规划研究(MATLAB)
一、无人机模型简介: 单个无人机三维路径规划问题及其建模_IT猿手的博客-CSDN博客 参考文献: [1]胡观凯,钟建华,李永正,黎万洪.基于IPSO-GA算法的无人机三维路径规划[J].现代电子技术,2023,46(07):115-120 二、高尔夫优化算法GOA简介 高尔夫优化算法…...
ESP32-Web-Server编程-建立第一个网页
ESP32-Web-Server编程-建立第一个网页 HTTP 简述 可能你每天都要刷几个短视频,打开几个网页来娱乐一番。当你打开一个网络上的视频或者图片时,其实际发生了下面的流程: 其中客户端就是你的浏览器啦,服务器就是远程一个存放视频或…...
csgo/steam游戏搬砖项目的五大认知误区
CSGO/steam游戏搬砖项目的5大认知误区 1、卡价越高越难选品?越没利润? 2、明明buff卖价《 steam求购价,为什么还能赚钱? 3、实名资料少就没法批量操作账号? 4、本金少就没法玩? 5、这个项目的风险是不是很大…...
ASCII sorting
描述 输入一个字符串,对其字符进行排序,输出其字符按ASCII码升序排列。 输入 无空格字符串 输出 按ASCII码升序输出其字符。 样例输入 and 样例输出 adn code(c版本) #include<stdio.h> #include<stdlib.h> // qs…...
redis--高可用之持久化
redis高可用相关知识 在web服务器中,高可用是指服务器可以正常访问的时间,衡量的标准是在多长时间内可以提供正常服务(99.9%、99.99%、99.999%等等)。 但是在Redis语境中,高可用的含义似乎要宽泛一些,除了保证提供正常服务( 如主…...
『VUE3 の 要点摘录』
✅v-model 用法 v-model 原生方法: v-model computed : 更改名字: 多个 v-model 绑定 处理 v-model 修饰符 ✅TS项目报错 1、TypeScript 错误 “Module ‘…index’ has no default export” // tsconfig.json {...."compilerOpt…...
Buzz库python代码示例
Buzz库来编写一个下载器程序。 php <?php require_once vendor/autoload.php; // 引入Buzz库 use Buzz\Browser; use Buzz\Message\Response; $browser new Browser(); // 设置 $browser->setHttpClient(new HttpClientProxy([ host > , port > , ])…...
Django路由分发
首先明白一点,Django的每一个应用下都可以有自己的templates文件夹,urls.py文件夹,static文件夹,基于这个特点,Django能够很好的做到分组开发(每个人只写自己的app),作为老大&#x…...
【UGUI】中Content Size Fitter)组件-使 UI 元素适应其内容的大小
官方文档:使 UI 元素适应其内容的大小 - Unity 手册 必备组件:Content Size Fitter 通常,在使用矩形变换定位 UI 元素时,应手动指定其位置和大小(可选择性地包括使用父矩形变换进行拉伸的行为)。 但是&a…...
第二十章Java博客
如果一次只完成一件事情,很容易实现。但现实生活中,很多事情都是同时进行的。Java中为了模拟这种状态,引入了线程机制。简单地说,当程序同时完成多件事情时,就是所谓的多线程。多线程应用相当广泛,使用多线…...
实验一 SAS 基本操作和数据表的导入 2023-11-29
一、上机目的 熟悉SAS的集成环境并掌握它的基本操作。理解SAS程序的结构,理解其中的过程,过程选项,语句,语句选项等概念,掌握SAS编程技术。 二、上机内容 主要有SAS操作界面、SAS窗口操作、SAS菜单操作、SAS按钮操作…...
QMCDecode技术解密:让加密音频重获自由的无损转换方案
QMCDecode技术解密:让加密音频重获自由的无损转换方案 【免费下载链接】QMCDecode QQ音乐QMC格式转换为普通格式(qmcflac转flac,qmc0,qmc3转mp3, mflac,mflac0等转flac),仅支持macOS,可自动识别到QQ音乐下载目录,默认转…...
【VBA】【EXCEL】工作日_节假日
Option Explicit 函数一:计算两个日期之间的工作日天数用法:CalcWorkDays(开始日期, 结束日期)示例:CalcWorkDays(A1,B1)Function CalcWorkDays(startDate As Date, endDate As Date) As LongDim i As DateDim workCount As LongDim isHolida…...
深度解析:如何高效使用开源虚拟机检测工具VMDE实现系统环境识别
深度解析:如何高效使用开源虚拟机检测工具VMDE实现系统环境识别 【免费下载链接】VMDE Source from VMDE paper, adapted to 2015 项目地址: https://gitcode.com/gh_mirrors/vm/VMDE 虚拟机检测工具VMDE是一款专业的开源工具,专门用于精确识别系…...
被裁两次,赔了30万,我真得感谢公司。21年赔10万,24年赔20万,平时月光,全靠裁员攒下第一桶金
今天刷到一个帖子,一个程序员说自己被裁了两次,21年赔了10万,24年赔了20万,加起来30万。他说平时一分钱都攒不下,全靠这两次裁员才有了存款,真得感谢公司。我第一反应是:这话听着挺魔幻…...
Win11下VSCode+QT5实战:从零搭建C++跨平台GUI开发环境
1. 环境准备:搭建开发环境的基石 在Windows 11上搭建C GUI开发环境,就像组装一台高性能电脑,需要先准备好所有必要的"硬件"和"软件"。我去年接手一个跨平台项目时,花了整整三天才把环境搭好,现在把…...
Qwen-Image-Edit-F2P教程:Gradio界面实时交互调试+生成过程进度条可视化原理
Qwen-Image-Edit-F2P教程:Gradio界面实时交互调试生成过程进度条可视化原理 想玩转AI图像编辑,但被复杂的命令行和漫长的等待劝退?今天,我们来点不一样的。我将带你深入一个开箱即用的AI图像编辑工具——Qwen-Image-Edit-F2P&…...
OpenClaw批量处理技巧:Qwen3.5-9B-AWQ-4bit优化1000+图片元数据
OpenClaw批量处理技巧:Qwen3.5-9B-AWQ-4bit优化1000图片元数据 1. 问题背景与需求拆解 上周接手了一个摄影爱好者的委托——他积累了近5000张未经整理的旅行照片,需要批量处理EXIF元数据并生成描述性标签。传统手动处理预计需要8小时,而通过…...
StructBERT-中文-large惊艳效果展示:中文新闻事件多源报道语义聚合案例
StructBERT-中文-large惊艳效果展示:中文新闻事件多源报道语义聚合案例 1. 引言:当新闻铺天盖地而来,如何看清真相? 你有没有过这样的经历?一个热点事件爆发,打开手机,各种新闻App、社交媒体、…...
OpenClaw技能市场挖掘:10个适配Kimi-VL-A3B-Thinking的多模态自动化
OpenClaw技能市场挖掘:10个适配Kimi-VL-A3B-Thinking的多模态自动化 1. 为什么需要为多模态模型定制技能? 当我第一次把Kimi-VL-A3B-Thinking模型接入OpenClaw时,发现一个有趣现象:这个擅长图文理解的多模态模型,在执…...
有能力的已经在投了:这一批AI公司,正在悄悄招人
导读很多人还在盯着互联网大厂,反复刷岗位、反复改简历。但另一批人,已经把简历投向了另一条线——人工智能公司、机器人公司、智能制造公司。这些公司有一个共同点:岗位不多,但含金量极高要求更高,但成长速度更快很多…...
