可以实现动态改变
在 ArkUI 中,可以通过多态样式 stateStyles与状态变量的结合,让按钮在不同交互状态(如normal、focused、pressed、disabled、selected)之间切换样式;同时还能把颜色等样式抽取为**@State**变量,在运行时修改,从而实现按钮外观的动态变化。示例:点击按钮后将获焦态背景色由红改为粉,按压与不可用等状态也可分别定制。
实现方式与示例
使用 stateStyles 绑定状态变量(推荐)
@Entry
@Component
struct Demo {
@State focusedColor: Color = Color.Red
normalColor: Color = Color.Green
build() {
Column() {
Button('Click me')
.stateStyles({
normal: { .backgroundColor(this.normalColor) },
focused: { .backgroundColor(this.focusedColor) },
pressed: { .backgroundColor(Color.Black) },
disabled: { .backgroundColor(Color.Gray) }
})
.onClick(() => {
this.focusedColor = Color.Pink // 动态切换获焦态颜色
})
}
.margin('30%')
}
}
使用 AttributeModifier 接口(API 11+)
class MyButtonModifier implements AttributeModifier<ButtonAttribute> {
isBlue: boolean = true
applyNormalAttribute(instance: ButtonAttribute): void {
instance.backgroundColor(this.isBlue ? Color.Blue : Color.Red)
}
applyPressedAttribute(instance: ButtonAttribute): void {
instance.backgroundColor(Color.Red)
}
applyDisabledAttribute(instance: ButtonAttribute): void {
instance.backgroundColor(Color.Gray)
}
applyFocusedAttribute(instance: ButtonAttribute): void {
instance.backgroundColor(Color.Yellow)
}
applySelectedAttribute(instance: ButtonAttribute): void {
instance.backgroundColor(Color.Green)
}
}
@Entry
@Component
struct AttrModSample {
@State modifier: MyButtonModifier = new MyButtonModifier()
build() {
Column() {
Button('AttrModifier')
.attributeModifier(this.modifier)
.onClick(() => {
this.modifier.isBlue = !this.modifier.isBlue // 动态切换
})
}
}
}
适用场景与选择建议
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。