HarmonyOS4.0系列——04、@Styles、@Extend、@Extend事件以及多态样式stateStyles

@Styles、@Extend、@Extend事件以及多态样式stateStyles

@Styles

通用样式
类似于css中的class
语法一:内部样式 放在struct内

  @Styles commonStyle(){.backgroundColor(Color.Pink).padding('20px')}

语法二:外部样式

@Styles function commonStyle() {.backgroundColor(Color.Pink).padding('40px')
}

调用.commonStyle()

总结:@Styles 内部样式和外部样式,内部样式优先级高于外部样式,内部不要需要用函数function定义,外部需要function;
缺点:只能用于通用样式,@Styles不能进行传参

那么如何进行传参呢?

@Extend()

在@Styles的基础上,可以使用@Extend,用于扩展原生组件样式。

@Extend(Text) function textStyle(fs:number){.fontSize(fs).fontColor(Color.Pink)
}

使用规范:和@Styles不同,@Extend仅支持定义在全局,不支持在组件内部定义。

@Extend(Text) function fancy () {.fontColor(Color.Red)
}// superFancyText可以调用预定义的fancy
@Extend(Text) function superFancyText(size:number) {.fontSize(size).fancy()
}

例:

@Entry
@Component
struct ExtendFun {@State message: string = '@Extend'build() {Row() {Column() {// Text(this.message).fontSize(40)Text('Southern Wind').superFancyText(40)}.width('100%')}.height('100%')}}// @Extend(Text) function textStyle(fs:number){
//   .fontSize(fs).fontColor(Color.Pink)
// }@Extend(Text) function fancy () {.fontColor(Color.Red)
}// superFancyText可以调用预定义的fancy
@Extend(Text) function superFancyText(size:number) {.fontSize(size).fancy()
}

效果:

在这里插入图片描述

当然函数与函数直接也是可以传参的

@Entry
@Component
struct ExtendFun {@State message: string = '@Extend'build() {Row() {Column() {// Text(this.message).fontSize(40)Text('Southern Wind').fancy('blue',FontWeight.Bold)Text('HarmonyOS4.0').superFancyText(20)}.width('100%')}.height('100%')}}@Extend(Text) function fancy (color:Color|string,fw:FontWeight) {.fontColor(color).fontWeight(fw)
}// superFancyText可以调用预定义的fancy
@Extend(Text) function superFancyText(size:number) {.fontSize(size).fancy(Color.Red,FontWeight.Bold)
}

在这里插入图片描述

**@Extend(Text)**如果里面是Text就代表对Text标签生效,如果为Button则代表对Button标签生效

@Extend函数事件

声明点击事件

@Extend(Button) function btnFun(click:()=>void) {.fontSize(30).width(150).height(50).onClick(()=>{click()})
}

标签调用:

@Entry
@Component
struct ExtendFun {@State count: number = 0build() {Row() {Column() {Button('点击 ' + this.count).btnFun(()=>{this.count ++})}.width('100%')}.height('100%')}}

效果:
在这里插入图片描述

stateStyles:多态样式

stateStyles可以依据组件的内部状态的不同,快速设置不同样式。其实可以把它理解为一种属性方法,类似于css伪类,但是语法不同

  • focused:获焦态。
  • normal:正常态。
  • pressed:按压态。
  • disabled:不可用态。

演示

@Entry
@Component
struct Index {@State message: string = 'Southern Wind'build() {Row() {Column() {TextInput()Divider().margin(20)TextInput().fontSize(30).fontWeight(FontWeight.Bold).stateStyles({normal:{.backgroundColor(Color.Yellow)},focused:{.backgroundColor(Color.Pink)},pressed:{.backgroundColor(Color.Blue)}})}.width('100%')}.height('100%')}
}
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/e28693389b8f4ee88bd31ad691a9d783.gif#pic_center)

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

几代WiFi有什么差异,它们有什么区别

最典型的差异指标:单流传输速率 第一代 基于的标准: 802.11 使用频率:2.4GHz 单流最大传输速率:2Mbit/s 第二代 基于的标准: 802.11b 使用频率:2.4GHz 单流最大传输速率:11Mbit/s 第三代 …

什么牌子冻干猫粮性价比高?性价比高的五款冻干猫粮牌子推荐

很多养猫的小伙伴们都磨刀霍霍准备给猫咪屯些猫冻干吧,特别是家里有挑食猫咪的家庭。有养猫的铲屎官们应该都知道,猫咪是对蛋白质的需求量很高,而且对植物蛋白的吸收效率比较低,所以蛋白质最好都是来自动物的优质蛋白。猫咪挑食就…

jmeter函数助手-常用汇总

一.函数助手介绍 1.介绍及作用 介绍: jmeter自带的一个特性,可以通过指定的函数规则创建后进行调用该函数,在后续接口请求参数中进行调用 作用 (1)做参数化。 2.如何使用 jmeter工具栏-->工具-->函数助手…

华为---USG6000V防火墙web基本配置示例

目录 1. 实验要求 2. 配置思路 3. 网络拓扑图 4. USG6000V防火墙端口和各终端相关配置 5. 在USG6000V防火墙web管理界面创建区域和添加相应端口 6. 给USG6000V防火墙端口配置IP地址 7. 配置通行策略 8. 测试验证 8.1 逐个删除策略,再看各区域终端通信情况 …

为何软件开发时需要性能测试工具

在当今数字化时代,软件已经成为我们生活和业务的核心。随着用户对高性能、高响应性和卓越用户体验的期望不断增长,软件开发过程中的性能测试变得至关重要。性能测试工具在确保软件正常运行、高效响应以及适应负载压力方面发挥着关键作用。本文将介绍为什…

台式电源质量如何检测?纳米软件为您科普

一、外观检测 观察台式机电脑电源外观是否有损伤、烧焦,电源线是否有破损、短线的情况。观察电源的电压、电流、功率等参数,是否符合台式机电脑。 二、直观检测 开通电源,如果所有指示灯不亮,风扇没有声音,电源损坏的可…

react学习第一天

脚手架的创建 1.创建环境变量 npm init -y 2.创建node-modules npm add -D create-react-app 3.创建脚手架 npx create-react-app react-demo1 报错一号 报错原因:node版本太低 解决:升级版本 nvm install 14.0.0 nvm use 14.0.0 报错二号 报错原因&…

搭建Vue前端项目的流程

一、搭建Vue项目流程 1、安装nodejs 测试安装是否成功 $ npm -v 6.14.16 $ node -v v12.22.122、全局安装npm install -g vue/cli,后续会使用到vue命令 $ vue --version vue/cli 5.0.83、使用vue create demo_project_fe命令创建项目,使用箭头键来选择…

lv13 内核模板编译方法 7

1 内核模块基础代码解析 Linux内核的插件机制——内核模块 类似于浏览器、eclipse这些软件的插件开发,Linux提供了一种可以向正在运行的内核中插入新的代码段、在代码段不需要继续运行时也可以从内核中移除的机制,这个可以被插入、移除的代码段被称为内…

Android画布Canvas drawPath绘制跟随手指移动的圆,Kotlin

Android画布Canvas drawPath绘制跟随手指移动的圆,Kotlin import android.content.Context import android.graphics.Canvas import android.graphics.Color import android.graphics.Paint import android.graphics.Path import android.os.Bundle import android.…

深入Mybatis数据源

数据源是持久层框架中最核心的组件之一,在实际工作中比较常见的数据源有 C3P0、Apache Common DBCP、Proxool 等。作为一款成熟的持久化框架,MyBatis 不仅自己提供了一套数据源实现,而且还能够方便地集成第三方数据源。 javax.sql.DataSourc…

MySQL数据库的安装与环境配置

下载 下载MySQL8 安装 解压 配置MySQL环境变量 系统环境变量path D:\ProgramFiles\mysql-8.0.20-winx64\bin 1.点击属性 2.点击高级系统设置 3.点击环境变量 4.在系统变量中找到path 注意这里不是用户变量 5.新建后输入解压的地址 MySQL初始化和启动 以管理员身份运行cmd…