• 【中秋国庆不断更】OpenHarmony多态样式stateStyles使用场景


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

    概述

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

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

    使用场景

    基础场景

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

    1. @Entry
    2. @Component
    3. struct StateStylesSample {
    4.   build() {
    5.     Column() {
    6.       Button('Click me')
    7.         .stateStyles({
    8.           focused: {
    9.             .backgroundColor(Color.Pink)
    10.           },
    11.           pressed: {
    12.             .backgroundColor(Color.Black)
    13.           },
    14.           normal: {
    15.             .backgroundColor(Color.Yellow)
    16.           }
    17.         })
    18.     }.margin('30%')
    19.   }
    20. }

    图1 获焦态和按压态  

    @Styles和stateStyles联合使用

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

    1. @Entry
    2. @Component
    3. struct MyComponent {
    4.   @Styles normalStyle() {
    5.     .backgroundColor(Color.Gray)
    6.   }
    7.   @Styles pressedStyle() {
    8.     .backgroundColor(Color.Red)
    9.   }
    10.   build() {
    11.     Column() {
    12.       Text('Text1')
    13.         .fontSize(50)
    14.         .fontColor(Color.White)
    15.         .stateStyles({
    16.           normal: this.normalStyle,
    17.           pressed: this.pressedStyle,
    18.         })
    19.     }
    20.   }
    21. }

    图2 正常态和按压态  

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

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

    1. @Entry
    2. @Component
    3. struct CompWithInlineStateStyles {
    4. @State focusedColor: Color = Color.Red;
    5. normalColor: Color = Color.Green
    6.   build() {
    7. Button('clickMe').height(100).width(100)
    8.       .stateStyles({
    9. normal: {
    10. .backgroundColor(this.normalColor)
    11. },
    12.         focused: {
    13. .backgroundColor(this.focusedColor)
    14. }
    15. })
    16.       .onClick(() => {
    17.         this.focusedColor = Color.Pink
    18. })
    19.       .margin('30%')
    20. }
    21. }

    Button默认获焦显示红色,点击事件触发后,获焦态变为粉色。

    图3 点击改变获焦态样式  

  • 相关阅读:
    ospf路由选路及路由汇总
    从不同的正态分布中抽取随机数randn()函数
    Agri-Net最短网络
    Redis链表
    使用记账软件记录生活收支明细,如何防止收支不被他人修改
    IDEA 将一个普通Java工程转化为maven工程
    分享艾思软件PHP(Thinkphp)后台自主框架测试试题
    测试工程师面试题,你都遇到过哪些呢?
    不需要报班学课程,也能制作手办创业的新方法!
    带你走进知识图谱的世界
  • 原文地址:https://blog.csdn.net/OpenHarmony_dev/article/details/133309919