鸿蒙开发:案例集合Tabs:分段按钮组件

🎯 案例集合Tabs:分段按钮组件

🏷️ 效果图

📖 参考

🧩 拆解

  • 自定义分段按钮组件(V1-V2组件都可用)推荐
javascript 复制代码
@Component
export struct customSegmentButton {
  @State xLocation: number = 0

  changeXLocation(str: string) {
    if (str === '备忘') {
      this.xLocation = 0
      return
    }
    this.xLocation = (200 - 6) / 2
  }

  build() {
    Row() {
      Text('备忘')
        .borderRadius('50')
        .height(50)
        .layoutWeight(1)
        .textAlign(TextAlign.Center)
        .onClick(() => {
          this.changeXLocation('备忘')
        })
      Text('待办')
        .borderRadius('50')
        .height(50)
        .layoutWeight(1)
        .textAlign(TextAlign.Center)
        .onClick(() => {
          this.changeXLocation('待办')
        })

      Text()
        .borderRadius('50')
        .position({ x: this.xLocation })
        .height('100%')
        .width((200 - 6) / 2)
        .animation({ curve: Curve.Smooth, duration: 250 })
        .backgroundColor(Color.White)
        .zIndex(-1)
        .shadow({ radius: 20, color: '#26000000' })

    }
    .padding(3)
    .width(200)
    .height(56)
    .backgroundColor($r('sys.color.segment_button_v2_tab_button_background'))
    .borderRadius('50')
  }
}
  • SegmentButton(V1)不推荐
javascript 复制代码
import { LengthMetrics, SegmentButton, SegmentButtonOptions } from '@kit.ArkUI';

/**
 * 分段按钮使用当前区域可使用的最大宽度作为组件宽度,并且根据按钮个数平均分配每个按钮宽度
 * 分段按钮高度根据按钮内容(文本及图片)自动适应,其最小高度为28vp
 */
@Component
export struct SegmentButtonV1Case {
  @State tabOptions: SegmentButtonOptions =
    SegmentButtonOptions.capsule({
      buttons: [{ text: '备忘' }, { text: '待办' }],
      buttonPadding: 3, // 整个按钮组内边距
      backgroundColor: $r('sys.color.segment_button_v2_tab_button_background'), // 整个按钮组背景
      selectedBackgroundColor: Color.White, // 选中的按钮背景色
      selectedFontColor: Color.Black, // 选中的按钮文字颜色
      fontWeight: FontWeight.Normal, // 按钮文字加粗
      fontSize: 16, // 按钮文字大小
      selectedFontSize: 16,// 选中按钮文字大小
      localizedButtonPadding: { top: new LengthMetrics(16), bottom: new LengthMetrics(16) }, // // 选中按钮内边距
    })
  @State tabSelectedIndexes: number[] = [0]

  build() {
    SegmentButton({
      options: this.tabOptions,
      selectedIndexes: $tabSelectedIndexes, // 默认选择某项的下标
      onItemClicked: (idx: number) => { // 选中某项下标
        this.getUIContext().getPromptAction().showToast({ message: `当前下标${idx}` })
      },
    })
      .width(200)

  }
}
  • SegmentButtonV2(V2)推荐
javascript 复制代码
import { LengthMetrics, SegmentButtonV2Items, TabSegmentButtonV2 } from "@kit.ArkUI";

@ComponentV2
export struct SegmentButtonV2Case {
  @Local textSelectedIndex: number = 0

  build() {
    TabSegmentButtonV2({
      items: new SegmentButtonV2Items([
        { text: '备忘' },
        { text: '待办' },
      ]),
      selectedIndex: this.textSelectedIndex!!, // 默认选择某项的下标
      buttonMinHeight: new LengthMetrics(50), // 整个按钮组的高度
      buttonBorderRadius: new LengthMetrics(50), // 整个按钮组的圆角
      buttonPadding: new LengthMetrics(3), // 整个按钮组的内边距
      itemMinHeight: new LengthMetrics(50), // 每个按钮的高度
      itemBorderRadius: new LengthMetrics(50), // 每个按钮的圆角
      itemFontSize: new LengthMetrics(16), // 每个按钮的文字大小
      itemSelectedFontSize: new LengthMetrics(16), // 选中按钮的文字大小
      itemSelectedFontWeight: FontWeight.Normal, // 选中按钮的文字加粗
      onItemClicked: (idx: number) => { // 选中某项下标
        this.getUIContext().getPromptAction().showToast({ message: `当前下标${idx}` })
      },
    })
      .width(200)
  }
}

🌍 案例集合Tabs

🌸🌼🌺

相关推荐
lqj_本人3 小时前
鸿蒙原生与Qt混合开发:性能优化与资源管理
qt·harmonyos
lqj_本人4 小时前
鸿蒙Qt字体实战:消灭“豆腐块“乱码与自定义字体加载
qt·华为·harmonyos
爱笑的眼睛114 小时前
深入探索HarmonyOS中RichText组件的HTML渲染机制
华为·harmonyos
IT闫4 小时前
figlet 在鸿蒙PC上的构建与适配
华为·harmonyos
全栈陈序员5 小时前
Whois 工具在 HarmonyOS PC 上的交叉编译实践
华为·harmonyos
空白诗5 小时前
tokei 在鸿蒙PC上的构建与适配
后端·华为·rust·harmonyos
哈__6 小时前
exa 在 HarmonyOS 上的构建与适配
elasticsearch·华为·harmonyos
全栈陈序员6 小时前
tre 在 HarmonyOS 上的构建与适配
华为·harmonyos
开源头条6 小时前
2025开放原子开发者大会开源鸿蒙技术分论坛:AI赋能筑智基,生态共荣启新篇
开源·开放原子·harmonyos