ArkUI Button:按钮分清主次,用户才知道往哪走

举报
蓝瘦的蜕变 发表于 2026/08/21 16:54:05 2026/08/21
【摘要】 这次我们只看 Button。不写登录,不写提交,也不弹窗,先把按钮本身讲明白。 按钮最怕什么?一排全是蓝色,一眼看过去每个都像主操作。用户不知道该点哪个,后面逻辑写得再漂亮也白搭。 所以这个案例只做几种按钮:主按钮、次按钮、危险按钮、弱按钮、整行按钮、并排按钮和禁用态。 参考文档: https://developer.

ArkUI Button:按钮分清主次,用户才知道往哪走

这次我们只看 Button。不写登录,不写提交,也不弹窗,先把按钮本身讲明白。

按钮最怕什么?一排全是蓝色,一眼看过去每个都像主操作。用户不知道该点哪个,后面逻辑写得再漂亮也白搭。

所以这个案例只做几种按钮:主按钮、次按钮、危险按钮、弱按钮、整行按钮、并排按钮和禁用态。

参考文档:

  • https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/arkui
  • https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/arkts-ui-development

先分出主次

主按钮给最重要的动作。次按钮给辅助动作。这个判断比颜色更重要。

Button('主按钮')
  .width('100%')
  .height(44)
  .fontSize(15)
  .fontWeight(700)
  .fontColor('#FFFFFF')
  .backgroundColor('#2563EB')
  .borderRadius(8)

Button('次按钮')
  .width('100%')
  .height(44)
  .fontSize(15)
  .fontColor('#1D4ED8')
  .backgroundColor('#DBEAFE')
  .borderRadius(8)

这里把主按钮做得更重,次按钮做得更轻。不是说蓝色就一定对,只是先让两者别长得一样。

危险动作别藏起来

删除、退出登录、覆盖数据,这类按钮最好单独拎出来。

Button('危险按钮')
  .width('100%')
  .height(44)
  .fontSize(15)
  .fontWeight(700)
  .fontColor('#FFFFFF')
  .backgroundColor('#DC2626')
  .borderRadius(8)

Button('弱按钮')
  .width('100%')
  .height(44)
  .fontSize(15)
  .fontColor('#334155')
  .backgroundColor('#F1F5F9')
  .borderRadius(8)

危险按钮不用做得吓人,但要让人知道它不是普通操作。弱按钮则相反,适合那些“点不点都行”的轻动作。

宽度决定按钮的语气

整行按钮看起来更像“我要你现在完成这件事”。并排按钮更像“这里有两个选择”。

Button('整行按钮')
  .width('100%')
  .height(46)
  .fontSize(15)
  .fontWeight(700)

Row({ space: 10 }) {
  Button('取消')
    .layoutWeight(1)
    .height(40)

  Button('确定')
    .layoutWeight(1)
    .height(40)
}

并排按钮这里用了 layoutWeight(1),让两个按钮平分宽度。比手写固定宽度稳一点,尤其是屏幕变宽变窄的时候。

禁用态别只靠颜色骗自己

有些页面只是把按钮调灰,但实际还能点。这个坑很常见,也很烦。

Button('暂不可用')
  .width('100%')
  .height(44)
  .fontSize(15)
  .fontColor('#94A3B8')
  .backgroundColor('#E2E8F0')
  .borderRadius(8)
  .enabled(false)

关键是最后的 enabled(false)。样式告诉用户“不能点”,属性也真的让它不能点。

看案例时看什么

打开案例页后,重点看这几组对比:

  • 主按钮是不是明显更重要。
  • 危险按钮有没有和普通按钮拉开。
  • 整行按钮和并排按钮的语气是不是不一样。
  • 禁用态是不是看起来不可点,也真的不可点。

这篇还是不跑 hvigor。打开案例页面看效果就够了。

你可以顺手改一下

把主按钮背景色换成你项目里的品牌色,再把次按钮改浅一点。只要主次能拉开,不一定非要照抄这个配色。

你见过最容易误点的按钮是什么样的?主按钮太多、危险按钮不明显,还是禁用态看起来像能点?评论区吐槽一下。

完整示例代码

文件位置:entry/src/main/ets/pages/arkUI/basic/ArkUIButtonDemo.ets

@Entry
@Component
struct ArkUIButtonDemo {
  @Builder
  sectionTitle(title: string, desc: string) {
    Column({ space: 4 }) {
      Text(title)
        .width('100%')
        .fontSize(16)
        .fontWeight(700)
        .fontColor('#0F172A')

      Text(desc)
        .width('100%')
        .fontSize(13)
        .fontColor('#64748B')
        .lineHeight(20)
    }
    .width('100%')
    .alignItems(HorizontalAlign.Start)
  }

  build() {
    Scroll() {
      Column({ space: 18 }) {
        Text('ArkUI Button')
          .width('100%')
          .fontSize(24)
          .fontWeight(700)
          .fontColor('#0F172A')

        Text('按钮先分清主次,再谈好看')
          .width('100%')
          .fontSize(22)
          .fontWeight(700)
          .fontColor('#111827')

        Text('今天我们先不写点击后的业务,只把按钮角色摆清楚:哪个是主操作,哪个是辅助,哪个需要提醒风险。')
          .width('100%')
          .fontSize(14)
          .fontColor('#64748B')
          .lineHeight(22)

        Column({ space: 12 }) {
          this.sectionTitle('主按钮和次按钮', '主按钮负责最重要的动作,次按钮负责辅助动作。一个区域里不要到处都是主按钮。')

          Button('主按钮')
            .width('100%')
            .height(44)
            .fontSize(15)
            .fontWeight(700)
            .fontColor('#FFFFFF')
            .backgroundColor('#2563EB')
            .borderRadius(8)

          Button('次按钮')
            .width('100%')
            .height(44)
            .fontSize(15)
            .fontColor('#1D4ED8')
            .backgroundColor('#DBEAFE')
            .borderRadius(8)
        }
        .width('100%')
        .padding(16)
        .backgroundColor('#F8FAFC')
        .borderRadius(8)

        Column({ space: 12 }) {
          this.sectionTitle('危险按钮和弱按钮', '删除、退出登录、覆盖数据这类动作要单独区分。弱按钮适合不想打断用户的轻操作。')

          Button('危险按钮')
            .width('100%')
            .height(44)
            .fontSize(15)
            .fontWeight(700)
            .fontColor('#FFFFFF')
            .backgroundColor('#DC2626')
            .borderRadius(8)

          Button('弱按钮')
            .width('100%')
            .height(44)
            .fontSize(15)
            .fontColor('#334155')
            .backgroundColor('#F1F5F9')
            .borderRadius(8)
        }
        .width('100%')
        .padding(16)
        .backgroundColor('#FFFFFF')
        .border({ width: 1, color: '#E2E8F0' })
        .borderRadius(8)

        Column({ space: 12 }) {
          this.sectionTitle('宽度和高度', '整行按钮适合表单提交,紧凑按钮适合工具区。不要把所有按钮都写成同一个尺寸。')

          Button('整行按钮')
            .width('100%')
            .height(46)
            .fontSize(15)
            .fontWeight(700)
            .fontColor('#FFFFFF')
            .backgroundColor('#0F766E')
            .borderRadius(8)

          Row({ space: 10 }) {
            Button('取消')
              .layoutWeight(1)
              .height(40)
              .fontSize(14)
              .fontColor('#334155')
              .backgroundColor('#E2E8F0')
              .borderRadius(8)

            Button('确定')
              .layoutWeight(1)
              .height(40)
              .fontSize(14)
              .fontColor('#FFFFFF')
              .backgroundColor('#0F172A')
              .borderRadius(8)
          }
          .width('100%')
        }
        .width('100%')
        .padding(16)
        .backgroundColor('#F0FDFA')
        .borderRadius(8)

        Column({ space: 12 }) {
          this.sectionTitle('禁用态', '禁用态不是把颜色调淡就完事,用户要能一眼看出这个动作现在不能点。')

          Button('暂不可用')
            .width('100%')
            .height(44)
            .fontSize(15)
            .fontColor('#94A3B8')
            .backgroundColor('#E2E8F0')
            .borderRadius(8)
            .enabled(false)
        }
        .width('100%')
        .padding(16)
        .backgroundColor('#FFF7ED')
        .borderRadius(8)
      }
      .width('100%')
      .padding(20)
      .alignItems(HorizontalAlign.Start)
    }
    .width('100%')
    .height('100%')
    .backgroundColor('#FFFFFF')
  }
}
【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。