鸿蒙开发03样式相关介绍(二)


一、样式复用

在页面开发过程中,会出出现大量重复的样式设置代码,可以使用@Styles和@Extend修饰符将帮助我们进行样式复用。

1.1 @Styles修饰符

@Styles装饰器可以将多条样式设置提炼成一个方法,直接在组件声明的位置调用。通过@Styles装饰器可以快速定义并复用自定义样式。

@Styles
function payWechatStyle(){
  .width('100%')
  .height(50)
  .borderRadius(4)
  .backgroundColor("#00c168")
  .onClick(()=>{
    promptAction.showToast({message: '微信支付成功'})
  })
}

@Entry
@Component
struct StylesCase {
  @Styles
  payAliStyle(){
    .width('100%')
    .height(50)
    .borderRadius(4)
    .backgroundColor("#ff1256e0")
    .onClick(()=>{
      promptAction.showToast({message: '支付宝支付成功'})
    })
  }

  build() {
    Column({space: 20}){
      Row(){
        Button("微信支付", { type: ButtonType.Normal })
          .payWechatStyle()
          .fontColor(Color.White)
      }.padding(20)
      Row(){
        Button("支付宝支付", { type: ButtonType.Normal })
          .payAliStyle()
          .fontColor(Color.White)
      }.padding(20)

      Row(){
        Button("支付宝支付", { type: ButtonType.Normal })
          .payAliStyle()
          .fontColor(Color.White)
      }.padding(20)
    }
  }
}

使用说明

  • 仅支持通用属性和通用事件
  • 可以定义在组件内(不需加function)或全局
  • 同时在组件内或全局定义时,组件内生效

限制条件

  • 方法中不能有参数
  • 不支持导出

1.2 @Extend修饰符

@Extend修饰符针对某类组件进行样式扩展,同样为了复用样式。

@Entry
@Component
struct ExtendCase {

  build() {
    Column({space: 20}){
      Button('支付宝支付')
        .payButton('alipay')
      Button('微信支付')
        .payButton('wechat')
    }
    .padding(20)
    .width('100%')
  }
}

@Extend(Button)
function payButton(type: 'alipay'|'wechat'){
  .type(ButtonType.Normal)
  .fontColor(Color.White)
  .width('100%')
  .height(50)
  .borderRadius(4)
  .backgroundColor(type == 'wechat'? "#00c168" : "#ff1256e0")
  .onClick(()=>{
    if (type == 'alipay') {
      promptAction.showToast({message:"支付宝支付成功"})
    }else{
      promptAction.showToast({message:"微信支付成功"})
    }
  })
}

使用说明

  • 只能定义在全局函数
  • 指定组件,只支持指定组件的私有属性、私有事件
  • 函数支持传参

限制条件

  • 不支持导出

二、多态样式

多态样式(stateStyles)根据组件内部状态的不同,快速设置不同样式。
ArkUI提供五种状态:

  • focused:获焦态
  • normal:正常态
  • pressed:按压态
  • disabled:不可用态
  • selected:选中态
@Entry
@Component
struct StateStylesCase {

  build() {
    Column({space: 20}){
      Row(){
        Text('你好!鸿蒙')
      }
      .padding(20)
      .height(80)
      .border({
        color: '#f3f4f5',
        width: 3
      })
      .borderRadius(4)
      .stateStyles({
        normal: {
          .backgroundColor(Color.White)
        },
        pressed: {
          .backgroundColor('#eee')
        }
      })
      .width('100%')
    }
    .padding(20)
    .justifyContent(FlexAlign.Center)
    .width('100%')
    .height('100%')
  }
}

设置normal和pressed状态时的背景颜色,按压时是#eee颜色,松开是白色。

使用说明
多态样式只支持通用属性的设置。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值