鸿蒙4.0开发笔记之ArkTS装饰器语法基础@Extend扩展组件样式与stateStyles多态样式(十一)

news2025/1/24 5:13:12

一、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 = 20
	build() {
		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 = 0

  build() {
    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、测试效果
3.4.1

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1268266.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Flutter下拉框使用和可替换按钮的组件

前言 1、下拉框 在使用flutter框架完成项目的时候,有一个下拉框选择排序条件的需求,需要将下拉的选择内容,放在下拉按钮的下面,如Unity的Dropdown。下图是完整的需求。但是flutter系统自带的DropdownButtonFormField&#xff0c…

RabbitMQ消息模型之Work Queues

Work Queues Work Queues,也被称为(Task Queues),任务模型,也是官网给出的第二个模型,使用的交换机类型是直连direct,也是默认的交换机类型。当消息处理比较耗时的时候,可能生产消息…

pkpmbs 建设工程质量监督系统 文件上传漏洞复现

0x01 产品简介 pkpmbs 建设工程质量监督系统是湖南建研信息技术股份有限公司一个与工程质量检测管理系统相结合的,B/S架构的检测信息监管系统。 0x02 漏洞概述 pkpmbs 建设工程质量监督系统 FileUpOrDown.aspx、/Platform/System/FileUpload.ashx、接口处存在任意文…

编程实现bf算法

BF算法(Brute Force算法)是一种朴素的字符串匹配算法,其基本思想是在文本串中不断地比较模式串和文本串中的子串,直到找到匹配的位置或者搜索完整个文本串。 下面是用Python实现BF算法的代码: def bf_search(text, p…

vuepress-----8、自定义域名

# 8、自定义域名 购买域名 [外链图片转存中…(img-0XcE3Zjv-1701236952478)] 填写域名、https # 自定义域名

【机器学习 | 可视化系列】可视化系列 之 决策树可视化

🤵‍♂️ 个人主页: AI_magician 📡主页地址: 作者简介:CSDN内容合伙人,全栈领域优质创作者。 👨‍💻景愿:旨在于能和更多的热爱计算机的伙伴一起成长!!&…

基于SSM的航空票务推荐系统的设计与实现

末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:Vue 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目:是 目录…

光伏、储能双层优化配置接入配电网研究(附带Matlab代码)

由于能源的日益匮乏,电力需求的不断增长等,配电网中分布式能源渗透率不断提高,且逐渐向主动配电网方向发展。此外,需求响应(demand response,DR)的加入对配电网的规划运行也带来了新的因素。因此,如何综合考…

UE 事件分发机制(二) day10

自定义事件分发机制 自建事件分发机制与结构 Unreal推荐的游戏逻辑开发流程 基于 Unreal推荐的游戏逻辑开发流程,一般我们的整体规划也就是这样 大致结构类图 创建接口类与管理类以及所需函数 新建一个Unreal接口类作为接口 然后创建一个蓝图函数库的基类 Ev…

适合大部分人可以做的兼职副业

大部分人每天八点上班,五点下班,日复一日地重复着枯燥的工作内容,关键是工资还不够花。那么,怎么才能增加日常收入、提高生活质量呢?副业兼职是个不错的赚钱选择。打工人除去日常工作,额外的空闲时间还是很…

宏基因组分析项目又双叒叕出新了!期盼已久的铁循环来了!!

铁是地球上几乎所有生命的微量营养素。它可以被铁氧化和铁还原微生物用作电子供体和电子受体,并用于多种生物过程,包括光合作用和呼吸作用。虽然铁是地壳中含量第四丰富的金属,但在有毒环境中,铁的生长往往受到限制,因…

惠威M200MKII音箱拆机

惠威M200MKII音箱是一对老音箱了,买了大概快有十多年了吧,几年前就已经有音量旋钮旋转的时候有噪音问题,一直用使用前快速左右旋一段时间,让电位器内部摩擦一下,就会好不少,但过些天又不行了。因为不是蓝牙…

基于springboot和vue的教务学生选课管理系统的设计与实现 (含源码+sql+视频导入教程)

👉文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1 、功能描述 基于Springboot和vue的教务(学生)管理系统拥有三种角色:管理员、教师和学生 管理员:班级管理、课程管理、创建课程、管理员管理、教师管理…

SDN、SD-WAN、CDN、SDH分别是什么,有什么关联?

SDN代表“软件定义网络”,是一种网络架构,它将网络控制和数据转发分离。SDWAN代表“软件定义广域网”,是SDN的一种实现,在广域网中使用虚拟化技术来连接分支机构和数据中心。 CDN代表“内容分发网络”,是一种通过在全球…

Python内置函数与标准库函数的详细解读

一、内置函数与标准库函数的区分 Python 解释器自带的函数叫做内置函数,这些函数可以直接使用,不需要导入某个模块。 Python 解释器也是一个程序,它给用户提供了一些常用功能,并给它们起了独一无二的名字,这些常用功能…

算法通关村第一关—青铜挑战—用Java基本实现各种链表操作

文章目录 第一关—链表【青铜挑战】1.1 单链表的概念1.2 链表的相关概念1.3 创建链表 - Java实现1.4 链表的增删改查1.4.1 遍历单链表 - 求单链表长度1.4.2 链表插入 - 三种位置插入(1)在链表的表头插入(2)在链表的中间插入&#…

sqlserver调试clr程序集

右键项目属性,选择调试,勾选sqlserver调试选项: 选择附加到进程调试,勾选显示所有用户的进程,选择sqlserver.exe进程,打好程序集的断点,基于sqlserver触发clr程序集,即可中止到相关断…

个人开发者是否能借助开源获利?

前言 近几年国内外开源软件的成倍增长,以及开源软件在互联网领域的比重越来越高,开源软件扮演者越来越重要的角色,所以开源软件不仅推动了技术领域的不断创新和发展,也给个人开发者们提供了越来越多的合作机会和获利的机会。同时&…

二叉树(判断是否为单值二叉树)

题目(力扣): 判断二叉树上每个节点的值是否相同,就需要让root节点分别与左节点和右节点分别比较是否相同。 注意:root等于空时,直接可以返回true; 首先,先判断他的特殊情况&#x…

序列号管理

序列号管理,将从以下方面进行学习和阐述 WHY 为什么需要序列号,有什么作用 HOW sap如何进行管理序列号 WHEN 什么情况下适合进行序列号管理 1、 什么是序列号 首先简单介绍一个序列号是什么东西,我们使用的手机、电脑或者大家…