HarmonyOS-stateStyles:多态样式

stateStyles:多态样式

@Styles和@Extend仅仅应用于静态页面的样式复用,stateStyles可以依据组件的内部状态的不同,快速设置不同样式。这就是我们本章要介绍的内容stateStyles(又称为:多态样式)。

概述

stateStyles是属性方法,可以根据UI内部状态来设置样式,类似于css伪类,但语法不同。ArkUI提供以下四种状态:

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

使用场景

基础场景

下面的示例展示了stateStyles最基本的使用场景。Button处于第一个组件,默认获焦,生效focused指定的粉色样式。按压时显示为pressed态指定的黑色。如果在Button前再放一个组件,使其不处于获焦态,就会生效normal态的黄色。

@Entry
@Component
struct StateStylesSample {
  build() {
    Column() {
      Button('Click me')
        .stateStyles({
          focused: {
            .backgroundColor(Color.Pink)
          },
          pressed: {
            .backgroundColor(Color.Black)
          },
          normal: {
            .backgroundColor(Color.Yellow)
          }
        })
    }.margin('30%')
  }
}

图1 获焦态和按压态
img

@Styles和stateStyles联合使用

以下示例通过@Styles指定stateStyles的不同状态。

@Entry
@Component
struct MyComponent {
  @Styles normalStyle() {
    .backgroundColor(Color.Gray)
  }

  @Styles pressedStyle() {
    .backgroundColor(Color.Red)
  }

  build() {
    Column() {
      Text('Text1')
        .fontSize(50)
        .fontColor(Color.White)
        .stateStyles({
          normal: this.normalStyle,
          pressed: this.pressedStyle,
        })
    }
  }
}

图2 正常态和按压态
img

在stateStyles里使用常规变量和状态变量

stateStyles可以通过this绑定组件内的常规变量和状态变量。

@Entry
@Component
struct CompWithInlineStateStyles {
  @State focusedColor: Color = Color.Red;
  normalColor: Color = Color.Green

  build() {
    Button('clickMe').height(100).width(100)
      .stateStyles({
        normal: {
          .backgroundColor(this.normalColor)
        },
        focused: {
          .backgroundColor(this.focusedColor)
        }
      })
      .onClick(() => {
        this.focusedColor = Color.Pink
      })
      .margin('30%')
  }
}
Button默认获焦显示红色,点击事件触发后,获焦态变为粉色。

**图3** 点击改变获焦态样式
![img](https://img-blog.csdnimg.cn/img_convert/ec8134a7e6fb88f6ee8c5ea17f0d4367.gif)

相关推荐

  1. <span style='color:red;'>多</span><span style='color:red;'>态</span>

    2024-01-07 18:46:04      26 阅读
  2. 什么是

    2024-01-07 18:46:04       34 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-01-07 18:46:04       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-07 18:46:04       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-07 18:46:04       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-07 18:46:04       20 阅读

热门阅读

  1. lambda表达式使用和示例

    2024-01-07 18:46:04       32 阅读
  2. QT 的信号和槽机制实现原理的常见问题问答

    2024-01-07 18:46:04       40 阅读
  3. 【SQL】delete 与 truncate 命令的区别

    2024-01-07 18:46:04       38 阅读
  4. Spring Security之授权

    2024-01-07 18:46:04       37 阅读
  5. socket在两个线程之间进行通信

    2024-01-07 18:46:04       37 阅读
  6. 软件工程_复习

    2024-01-07 18:46:04       30 阅读
  7. LeetCode 第379场周赛个人题解

    2024-01-07 18:46:04       37 阅读
  8. vue3 里的 ts 类型工具函数

    2024-01-07 18:46:04       41 阅读
  9. SQL注入总结

    2024-01-07 18:46:04       45 阅读