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

程序员一鸣
• 阅读 1

前言

本文基于Api12

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

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

Button("点击")
        .backgroundColor(this.clickBackgroundColor)
        .onTouch((event: TouchEvent) => {
          if (event.type == TouchType.Down) {
            this.clickBackgroundColor = Color.Red
          } else if (event.type == TouchType.Up) {
            this.clickBackgroundColor = Color.Black
          }
        })

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

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

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

Button("点击")
        .stateStyles({
          pressed: { //按压
            .backgroundColor(Color.Red)
          },
          normal: { //正常态
            .backgroundColor(Color.Black)
          }
        })

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

简单概述

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

状态 概述
focused 获焦态
normal 正常态
pressed 按压态
disabled 不可用态
selected 选中态

实际场景

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

Button("点击")
        .stateStyles({
          pressed: { //按压
            .backgroundColor(Color.Red)
            .width(200)
            .height(100)
          },
          normal: { //正常态
            .backgroundColor(Color.Black)
            .width(100)
            .height(50)
          }
        })

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

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

定义Styles:

@Styles
  normalStyle() {
    .backgroundColor(Color.Black)
    .width(100)
    .height(50)
  }

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

使用Styles:

Button("点击")
        .stateStyles({
          pressed: this.pressedStyle,
          normal: this.normalStyle
        })

总结

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

简单案例:

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)
          },
        })

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

点赞
收藏
评论区
推荐文章
菜园前端 菜园前端
2年前
什么是 CSS?
原文链接:什么是CSS?CSS指层叠样式表(CascadingStyleSheets),理解为CSS样式就可以了。CSS样式有什么作用呢?比如我们在页面中添加了一个div,我想给这个div设置宽度、高度、背景色、阴影、内容字体样式等等,就是通过CSS样式来
Python进阶者 Python进阶者
3年前
一篇文章带你了解CSS 文本样式
大家好,我是IT共享者,人称皮皮。这篇文章我们来讲讲CSS的文本样式。一、文本颜色Color颜色属性被用来设置文字的颜色。颜色是通过CSS最经常的指定:十六进制值如"#FF0000"。一个RGB值"RGB(255,0,0)"。颜色的名称如"红"。一个网页的文本颜色是指在主体内的选择:
Wesley13 Wesley13
3年前
C++课程第五次博客——多态
\TOC\多态性Part1多态性概述多态是指同样的消息被不同类型的对象接收时导致不同的行为。在C中,所谓信息是指对类的成员函数的调用,不同的行为是指不同的实现,也就是调用了不同的函数。1)多态的类型分为四类:重载多态,强制多态,包含多态和参数多态。前两者为专用多态,而后者称为通用多态。2)
Stella981 Stella981
3年前
Sass @media指令
本节我们学习Sass中的@media指令,@media指令用于设置样式规则到不同的媒体类型,这和CSS的使用规则差不多,但是它还有一点不同,就是@media指令可以嵌套在Sass选择器中。有点类似于JS冒泡功能,它会冒泡到样式表的顶层。@media指令的使用示例:.xkd{
Stella981 Stella981
3年前
Sass
嵌套规则(NestedRules)Sass允许将一套CSS样式嵌套进另一套样式中,内层的样式将它外层的选择器作为父选择器mainp{color:00ff00;width:97%;.redbox{
Wesley13 Wesley13
3年前
CSS基础知识整理
1什么是CSS?CSS通常称为CSS样式表或层叠样式表(级联样式表),主要用于设置HTML页面中的文本内容(字体、大小、对齐方式等)、图片的外形(宽高、边框样式、边距等)以及版面的布局等外观显示样式。CSS以HTML为基础,提供了丰富的功能,如字体、颜色、背景的控制及整体排版等,而且还可以针对不同的浏览器设置不同的样式。
Wesley13 Wesley13
3年前
JS和CSS加载(渲染)机制不同
一、结论CSS可以在页面加载完成后随时渲染。举个例子:通过js给某个元素加一个id或者css,只要这个id或者css有对应的样式,此元素的样式就会自动生效。JS不可以在页面加载完成后生效。最明显的例子就是使用EasyUI的时候,iframe中哪些样式无效(EasyUi是依靠JS进行样式处理的,所以无法运行JS,那么样式也就无法设置。简单点说
Stella981 Stella981
3年前
Jfreechart绘制漂亮的图表
要想绘制出漂亮的图表,就必须了解图表的构成部分,将图表进行分解成N个部分。然后再对每一个部分进行渲染,设置样式:包括背景色、轮廓线条样式和颜色、填充颜色、字体大小、样式、颜色。同时,需要确保在整个项目中,图表的样式风格整体统一,统一,和谐才能打造漂亮、干净、专业的外观.1.使用JfreeChart创建柱状图,折线图,饼图,堆积柱状图,时间序列图
陈杨 陈杨
7小时前
鸿蒙5横向柱状图series属性解析
大家好,欢迎回来鸿蒙5莓创图表组件的专场,我们这一期来讲解McHorBarChart(横向柱状图)组件中series属性的详细用法。series属性是控制柱状图数据系列的核心配置项,掌握好这些属性可以让你轻松创建各种样式的柱状图效果。1.name属性作用:
陈杨 陈杨
7小时前
鸿蒙5莓创折线与柱状图yAxis属性详解
大家好,欢迎回来鸿蒙5莓创图表组件的专场,我们这一期来讲解组合图组件中yAxis属性的详细用法。yAxis是图表中非常重要的配置项,它决定了Y轴的显示方式、样式和行为。下面我们将全面解析yAxis的各个属性及其子属性。基础属性type作用:指定Y轴的类型类