鸿蒙next开发学习指南:多态样式-@stateStyles状态变量

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

多态样式仅支持通用属性

概述

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

  • focused:获焦态。

  • normal:正常态。

  • pressed:按压态。

  • disabled:不可用态。

  • selected10+:选中态。

使用场景

基础场景

下面的示例展示了stateStyles最基本的使用场景。Button1处于第一个组件,Button2处于第二个组件。按压时显示为pressed态指定的黑色。使用Tab键走焦,先是Button1获焦并显示为focus态指定的粉色。当Button2获焦的时候,Button2显示为focus态指定的粉色,Button1失焦显示normal态指定的蓝色。

@Entry
@Component
struct StateStylesSample {
  build() {
    Column() {
      Button('Button1')
        .stateStyles({
          focused: {
            .backgroundColor('#ffffeef0')
          },
          pressed: {
            .backgroundColor('ff707070')
          },
          normal: {
            .backgroundColor('ff2787d9')
          }
        })
        .margin(20)
      Button('Button2')
        .stateStyles({
          focused: {
            .backgroundColor('#ffffeef0')
          },
          pressed: {
            .backgroundColor('ff707070')
          },
          normal: {
            .backgroundColor('ff2787d9')
          }
        })
    }.margin('30%')
  }
}

图1 获焦态和按压态

### 多态样式的定义与使用 在前端开发领域,`stateStyles` 是专门用来定义多态样式的关键词[^1]。它允许开发者基于组件的不同状态(如 `focused`, `normal`, 和 `pressed`),快速设置不同的样式表现[^4]。 #### stateStyles 的基本概念 `stateStyles` 提供了一种机制来描述组件在其生命周期中的多种可能状态下的外观变化。这种特性使得 UI 开发更加灵活和高效,尤其是在处理交互性强的应用场景时尤为有用。 以下是 `stateStyles` 结合其他装饰器使用的代码示例: ```javascript @Entry @Component struct StateStylesSample { @Styles normalStyle() { .backgroundColor(Color.Gray) } build() { Column() { Button('Button1') .stateStyles({ focused: { .backgroundColor(Color.Pink) }, normal: { .backgroundColor(Color.Black) }, pressed: { .backgroundColor(Color.Red) } }) }.margin('30%') } } ``` 上述代码展示了如何利用 `stateStyles` 来配置按钮在不同状态下(聚焦、默认、按下)的背景颜色变化。 #### Extend 与其他关键字的区别 虽然 `@Extend` 可以用于继承已有组件的样式,但它并不具备直接定义多态样式的功能。而 `@Styles` 则主要用于提取重复的样式逻辑以便于复用[^2]。相比之下,`stateStyles` 更专注于解决组件状态切换时的样式管理需求。 对于更复杂的动态属性调整情况,还可以考虑采用 `AttributeModifier` 工具[^3]。尽管它的灵活性更高,但在简单的状态样式设定上,`stateStyles` 显得更为直观易懂。 ### 使用方法总结 为了实现多态样式的定义,应优先选用 `stateStyles` 进行操作,并可根据实际项目复杂度决定是否引入辅助工具如 `AttributeModifier` 或者结合 `@Styles` 装饰器共同完成任务。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值