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

打印 上一主题 下一主题

主题 849|帖子 849|积分 2547

@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 点击改变获焦态样式

本文由博客一文多发平台 OpenWrite 发布!

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

曹旭辉

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表