鸿蒙开发:走进stateStyles多态样式
鸿蒙开发:走进stateStyles多态样式
前言
代码运行环境:全部基于HarmonyOs EXT
DevEco Studio:Build Version: 5.0..900
API:12
modelVersion:5.0.0
一个组件,多种状态下,我们如何实现呢?举一个很简单的案例,一个按钮,默认状态下是黑背景,点击后是红,手指放开后还原黑。
我们自然而然的就会想到利用手势的按下和抬起,改变其背景颜即可,代码如下:
代码语言:javascript代码运行次数:0运行复制Button("点击")
.backgroundColor()
.onTouch((event: TouchEvent) => {
if ( == TouchType.Down) {
= Color.Red
} else if ( == TouchType.Up) {
= Color.Black
}
})
除了onTouch之外,gesture也可以实现其效果,无论哪种实现,我们都是要定义变量,改变某一个属性,有没有一种方式,直接更改属性呢?当然是有的,这就是stateStyles。
同样是上一个案例,我们使用stateStyles来实现一下,代码如下:
代码语言:javascript代码运行次数:0运行复制Button("点击")
.stateStyles({
pressed: { //按压
.backgroundColor(Color.Red)
},
normal: { //正常态
.backgroundColor(Color.Black)
}
})
可以发现,效果是和上述一模一样的。
stateStyles为多态样式,可以依据组件的内部状态的不同,快速设置不同样式,比如背景颜,颜、大小等等常见的通用属性,此种行为,很类似于css中的伪类,但语法稍有不同,目前支持的有以下五种状态:
状态 | 概述 |
---|---|
focused | 获焦态 |
normal | 正常态 |
pressed | 按压态 |
disabled | 不可用态 |
selected | 选中态 |
具体的场景主要适用于多状态的切换,比如前言中的案例,当然了,它是支持多个属性的,比如,我们再增加宽高属性:
代码语言:javascript代码运行次数:0运行复制Button("点击")
.stateStyles({
pressed: { //按压
.backgroundColor(Color.Red)
.width(200)
.height(100)
},
normal: { //正常态
.backgroundColor(Color.Black)
.width(100)
.height(50)
}
})
除了多个属性之外,另外也可以直接传递样式:
定义Styles:
代码语言:javascript代码运行次数:0运行复制@Styles
normalStyle() {
.backgroundColor(Color.Black)
.width(100)
.height(50)
}
@Styles
pressedStyle() {
.backgroundColor(Color.Red)
.width(200)
.height(100)
}
使用Styles:
代码语言:javascript代码运行次数:0运行复制Button("点击")
.stateStyles({
pressed: this.pressedStyle,
normal:
})
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 |
简单案例:
代码语言:javascript代码运行次数:0运行复制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)
},
})
#感谢您对电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格的认可,转载请说明来源于"电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格
推荐阅读
留言与评论(共有 13 条评论) |
本站网友 我是陈欧 | 5分钟前 发表 |
但语法稍有不同 | |
本站网友 接触传播 | 15分钟前 发表 |
normal | |
本站网友 213002基金净值 | 13分钟前 发表 |
我们使用stateStyles来实现一下 | |
本站网友 重型燃气轮机 | 5分钟前 发表 |
我们都是要定义变量 | |
本站网友 海沧租房网 | 15分钟前 发表 |
但语法稍有不同 | |
本站网友 肠胃不适 | 27分钟前 发表 |
}) | |
本站网友 肥婆减肥 | 6分钟前 发表 |
normal | |
本站网友 乌鲁木齐酒店 | 8分钟前 发表 |
我们再增加宽高属性:代码语言:javascript代码运行次数:0运行复制Button("点击") .stateStyles({ pressed | |
本站网友 杭州二手房网 | 9分钟前 发表 |
我们都是要定义变量 | |
本站网友 优博国际 | 2分钟前 发表 |
{ //正常态 .backgroundColor(Color.Black) } })可以发现 | |
本站网友 电吹风功率 | 5分钟前 发表 |
效果是和上述一模一样的 | |
本站网友 新三本 | 22分钟前 发表 |
但语法稍有不同 |