您现在的位置是:首页 > 编程 > 

鸿蒙开发:走进stateStyles多态样式

2025-07-29 15:18:12
鸿蒙开发:走进stateStyles多态样式 前言代码运行环境:全部基于HarmonyOs EXTDevEco Studio:Build Version: 5.0..900API:12modelVersion:5.0.0一个组件,多种状态下,我们如何实现呢?举一个很简单的案例,一个按钮,默认状态下是黑背景,点击后是红,手指放开后还原黑。我们自然而然的就会想到利用手势的按下和抬起,改变其背

鸿蒙开发:走进stateStyles多态样式

前言

代码运行环境:全部基于HarmonyOs EXT

DevEco Studio:Build Version: 5.0..900

API:12

modelVersion:5.0.0

一个组件,多种状态下,我们如何实现呢?举一个很简单的案例,一个按钮,默认状态下是黑背景,点击后是红,手指放开后还原黑。

我们自然而然的就会想到利用手势的按下和抬起,改变其背景颜即可,代码如下:

代码语言:javascript代码运行次数:0运行复制
Button("点击")
        .backgroundColor()
        .onTouch((event: TouchEvent) => {
          if ( == TouchType.Down) {
             = Color.Red
          } else if ( == TouchType.Up) {
             = Color.Black
          }
        })

除了onTouch之外,gesture也可以实现其效果,无论哪种实现,我们都是要定义变量,改变某一个属性,有没有一种方式,直接更改属性呢?当然是有的,这就是stateStyles。

同样是上一个案例,我们使用stateStyles来实现一下,代码如下:

代码语言:javascript代码运行次数:0运行复制
Button("点击")
        .stateStyles({
          pressed: { //按压
            .backgroundColor(Color.Red)
          },
          normal: { //正常态
            .backgroundColor(Color.Black)
          }
        })

可以发现,效果是和上述一模一样的。

简单概述

stateStyles为多态样式,可以依据组件的内部状态的不同,快速设置不同样式,比如背景颜,颜、大小等等常见的通用属性,此种行为,很类似于css中的伪类,但语法稍有不同,目前支持的有以下五种状态:

状态

概述

focused

获焦态

normal

正常态

pressed

按压态

disabled

不可用态

selected

选中态

实际场景

具体的场景主要适用于多状态的切换,比如前言中的案例,当然了,它是支持多个属性的,比如,我们再增加宽高属性:

代码语言:javascript代码运行次数:0运行复制
Button("点击")
        .stateStyles({
          pressed: { //按压
            .backgroundColor(Color.Red)
            .width(200)
            .height(100)
          },
          normal: { //正常态
            .backgroundColor(Color.Black)
            .width(100)
            .height(50)
          }
        })

除了多个属性之外,另外也可以直接传递样式:

定义Styles:

代码语言:javascript代码运行次数:0运行复制
@Styles
  normalStyle() {
    .backgroundColor(Color.Black)
    .width(100)
    .height(50)
  }

  @Styles
  pressedStyle() {
    .backgroundColor(Color.Red)
    .width(200)
    .height(100)
  }

使用Styles:

代码语言:javascript代码运行次数:0运行复制
Button("点击")
        .stateStyles({
          pressed: this.pressedStyle,
          normal: 
        })
总结

selected状态一般用于可选择的组件,比如Checkbox,比如Radio,目前支持的组件如下:

支持组件

支持的参数/属性

起始API版本

Checkbox

select

10

CheckboxGroup

selectAll

10

Radio

checked

10

Toggle

isOn

10

ListItem

selected

10

GridItem

selected

10

MenuItem

selected

10

简单案例:

代码语言:javascript代码运行次数:0运行复制
Radio({ value: 'Radio1', group: 'radioGroup1' })
        .checked(this.value)
        .height(50)
        .width(50)
        .borderRadius(50)
        .radioStyle({ checkedBackgroundColor: Color.Red })
        .onClick(() => {
          this.value = !this.value
        })
        .stateStyles({
          normal: {
            .backgroundColor(Color.Black)
          },
          selected: {
            .backgroundColor(Color.Red)
          },
        })

#感谢您对电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格的认可,转载请说明来源于"电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格

本文地址:http://www.dnpztj.cn/biancheng/1237591.html

相关标签:无
上传时间: 2025-07-26 18:22:31
留言与评论(共有 13 条评论)
本站网友 我是陈欧
5分钟前 发表
但语法稍有不同
本站网友 接触传播
15分钟前 发表
normal
本站网友 213002基金净值
13分钟前 发表
我们使用stateStyles来实现一下
本站网友 重型燃气轮机
5分钟前 发表
我们都是要定义变量
本站网友 海沧租房网
15分钟前 发表
但语法稍有不同
本站网友 肠胃不适
27分钟前 发表
})
本站网友 肥婆减肥
6分钟前 发表
normal
本站网友 乌鲁木齐酒店
8分钟前 发表
我们再增加宽高属性:代码语言:javascript代码运行次数:0运行复制Button("点击") .stateStyles({ pressed
本站网友 杭州二手房网
9分钟前 发表
我们都是要定义变量
本站网友 优博国际
2分钟前 发表
{ //正常态 .backgroundColor(Color.Black) } })可以发现
本站网友 电吹风功率
5分钟前 发表
效果是和上述一模一样的
本站网友 新三本
22分钟前 发表
但语法稍有不同