openharmony 鸿蒙 ohos-arkui-advanced-SegmentButton

2025-06-12 浏览 (1)

SegmentButton

SegmentButton is a versatile component containing a group of related items, which can be tab-style, single-select, and multi-select buttons.

NOTE

This component and its child components are supported since API version 11. Updates will be marked with a superscript to indicate their earliest API version.

Modules to Import

import { SegmentButton, SegmentButtonOptions, SegmentButtonItemOptionsArray } from '@kit.ArkUI';

Child Components

Not supported

SegmentButton

SegmentButton({ options: SegmentButtonOptions, selectedIndexes: number[], onItemClicked: Callback<number>, maxFontScale: number |Resource })

Decorator: @Component

System capability: SystemCapability.ArkUI.ArkUI.Full

NameTypeMandatoryDecoratorDescription
optionsSegmentButtonOptionsYes@ObjectLinkOptions of the SegmentButton component.
Atomic service API: This API can be used in atomic services since API version 12.
selectedIndexesnumber[]Yes@LinkIndexes of selected items of the SegmentButton. The index starts from 0 and increments by 1.
NOTE
selectedIndexes is decorated with @Link to implement parent-child two-way synchronization. If no items are selected, an empty array [] can be passed in.
Atomic service API: This API can be used in atomic services since API version 12.
onItemClicked13+Callback<number>No-Callback invoked when an item in the SegmentButton is clicked. The index of the clicked item is passed in as the parameter.
Atomic service API: This API can be used in atomic services since API version 13.
maxFontScale14+number |ResourceYes@PropMaximum font scale for the text in the SegmentButton.
Default value: 1
Value range: [1, 2]
NOTE
Values less than 1 are treated as 1, and values greater than 2 are treated as 2.
Atomic service API: This API can be used in atomic services since API version 14.

NOTE

The SegmentButton component does not support the universal attributes. The component takes up the maximum width allowed by the content area, and evenly allocates the width among its items. It adapts its height automatically to the content (text and image), the minimum height being 28 vp.

SegmentButtonOptions

Provides initial data and custom properties for the SegmentButton component.

Decorator Type: @Observed

Atomic service API: This API can be used in atomic services since API version 12.

System capability: SystemCapability.ArkUI.ArkUI.Full

Properties

NameTypeMandatoryDescription
type'tab' |'capsule'YesType of the SegmentButton.
multiplybooleanYesWhether multiple items can be selected.
NOTE
The default value is false.
true: Multiple items can be selected.
false: Multiple items cannot be selected. For the SegmentButton component consisting of tab-style buttons, only one item can be selected. In this case, setting multiply to true does not take effect.
buttonsSegmentButtonItemOptionsArrayYesButton information, including the icon and text.
fontColorResourceColorYesFont color of the unselected item.
Default value: $r('sys.color.ohos_id_color_text_secondary')
selectedFontColorResourceColorYesFont color of the selected item.
Default value: $r('sys.color.ohos_id_color_text_primary') when type is "tab" and $r('sys.color.ohos_id_color_foreground_contrary') when type is "capsule"
fontSizeDimensionNoPercentageYesFont size of the unselected item. It cannot be set in percentage.
Default value: $r('sys.float.ohos_id_text_size_body2')
selectedFontSizeDimensionNoPercentageYesFont size of the selected item. It cannot be set in percentage.
Default value: $r('sys.float.ohos_id_text_size_body2')
fontWeightFontWeightYesFont weight of the unselected item.
Default value: FontWeight.Regular
selectedFontWeightFontWeightYesFont weight of the selected item.
Default value: FontWeight.Medium
backgroundColorResourceColorYesBackground color of the unselected item.
Default value: $r('sys.color.ohos_id_color_button_normal')
selectedBackgroundColorResourceColorYesBackground color of the selected item.
Default value: $r('sys.color.ohos_id_color_foreground_contrary') when type is "tab" and $r('sys.color.ohos_id_color_emphasize') when type is "capsule"
imageSizeSizeOptionsYesImage size.
Default value: { width: 24, height: 24 }
NOTE
This property is effective only for buttons that contain icons.
buttonPaddingPadding |DimensionYesButton margin.
Default value: { top: 4, right: 8, bottom: 4, left: 8 } for icon buttons and text buttons, and { top: 6, right: 8, bottom: 6, left: 8 } for icon+text buttons.
textPaddingPadding |DimensionYesText padding.
Default value: 0
localizedButtonPadding12+LocalizedPaddingNoButton padding.
Default value:
Text-only buttons and icon-only buttons: { top: LengthMetrics.vp(4), end: LengthMetrics.vp(8), bottom: LengthMetrics.vp(4), start: LengthMetrics.vp(8) }
Buttons with both an icon and text: { top: LengthMetrics.vp(6), end: LengthMetrics.vp(8), bottom: LengthMetrics.vp(6), start: LengthMetrics.vp(8) }
localizedTextPadding12+LocalizedPaddingNoText padding.
Default value: 0
direction12+DirectionNoLayout direction.
Default value: Direction.Auto
backgroundBlurStyleBlurStyleYesBackground blur style applied between the content and the background.
Default value: BlurStyle.NONE

constructor

constructor(options: TabSegmentButtonOptions|CapsuleSegmentButtonOptions)

A constructor used to create a SegmentButtonOptions instance.

Atomic service API: This API can be used in atomic services since API version 12.

System capability: SystemCapability.ArkUI.ArkUI.Full

NameTypeMandatoryDescription
optionsTabSegmentButtonOptions | CapsuleSegmentButtonOptionsYesOptions of the SegmentButton component.

tab

static tab(options: TabSegmentButtonConstructionOptions): SegmentButtonOptions

Creates a SegmentButtonOptions object for the SegmentButton component consisting of tab-style buttons.

Atomic service API: This API can be used in atomic services since API version 12.

System capability: SystemCapability.ArkUI.ArkUI.Full

NameTypeMandatoryDescription
optionsTabSegmentButtonConstructionOptionsYesOptions of the tab-style buttons.

Return value

TypeDescription
SegmentButtonOptionsSegmentButtonOptions object.

capsule

static capsule(options: CapsuleSegmentButtonConstructionOptions): SegmentButtonOptions

Creates a SegmentButtonOptions object for the SegmentButton component consisting of single-select or multi-select buttons.

Atomic service API: This API can be used in atomic services since API version 12.

System capability: SystemCapability.ArkUI.ArkUI.Full

NameTypeMandatoryDescription
optionsCapsuleSegmentButtonConstructionOptionsYesOptions of the single-select or multi-select buttons.

Return value

TypeDescription
SegmentButtonOptionsSegmentButtonOptions object.

DimensionNoPercentage

type DimensionNoPercentage = PX|VP|FP|LPX|Resource

Represents the length union type that does not support values in percentage.

Atomic service API: This API can be used in atomic services since API version 12.

System capability: SystemCapability.ArkUI.ArkUI.Full

TypeDescription
PXLength in px.
VPLength in vp.
FPLength in fp.
LPXLength in lpx.
ResourceResource reference type, which is used to set the value of a component attribute.

CommonSegmentButtonOptions

Defines the attributes that can be customized for the segment button.

Atomic service API: This API can be used in atomic services since API version 12.

System capability: SystemCapability.ArkUI.ArkUI.Full

Properties

NameTypeMandatoryDescription
fontColorResourceColorNoFont color of the unselected item.
Default value: $r('sys.color.ohos_id_color_text_secondary')
selectedFontColorResourceColorNoFont color of the selected item.
Default value: $r('sys.color.ohos_id_color_text_primary') when type is "tab" and $r('sys.color.ohos_id_color_foreground_contrary') when type is "capsule"
fontSizeDimensionNoPercentageNoFont size of the unselected item. It cannot be set in percentage.
Default value: $r('sys.float.ohos_id_text_size_body2')
selectedFontSizeDimensionNoPercentageNoFont size of the selected item. It cannot be set in percentage.
Default value: $r('sys.float.ohos_id_text_size_body2')
fontWeightFontWeightNoFont weight of the unselected item.
Default value: FontWeight.Regular
selectedFontWeightFontWeightNoFont weight of the selected item.
Default value: FontWeight.Medium
backgroundColorResourceColorNoBackground color of the unselected item.
Default value: $r('sys.color.ohos_id_color_button_normal')
selectedBackgroundColorResourceColorNoBackground color of the selected item.
Default value: $r('sys.color.ohos_id_color_foreground_contrary') when type is "tab" and $r('sys.color.ohos_id_color_emphasize') when type is "capsule"
imageSizeSizeOptionsNoImage size.
Default value: { width: 24, height: 24 }
NOTE
This property is effective only for buttons that contain icons.
buttonPaddingPadding |DimensionNoButton margin.
Default value: { top: 4, right: 8, bottom: 4, left: 8 } for icon buttons and text buttons, and { top: 6, right: 8, bottom: 6, left: 8 } for icon+text buttons.
textPaddingPadding |DimensionNoText padding.
Default value: 0
localizedButtonPadding12+LocalizedPaddingNoButton padding.
Default value:
Text-only buttons and icon-only buttons: { top: LengthMetrics.vp(4), end: LengthMetrics.vp(8), bottom: LengthMetrics.vp(4), start: LengthMetrics.vp(8) }
Buttons with both an icon and text: { top: LengthMetrics.vp(6), end: LengthMetrics.vp(8), bottom: LengthMetrics.vp(6), start: LengthMetrics.vp(8) }
localizedTextPadding12+LocalizedPaddingNoText padding.
Default value: 0
direction12+DirectionNoLayout direction.
Default value: Direction.Auto
backgroundBlurStyleBlurStyleNoBackground blur style applied between the content and the background.
Default value: BlurStyle.NONE

TabSegmentButtonConstructionOptions

Represents options for creating a SegmentButton component consisting of tab-style buttons.

It inherits CommonSegmentButtonOptions.

Atomic service API: This API can be used in atomic services since API version 12.

System capability: SystemCapability.ArkUI.ArkUI.Full

Properties

NameTypeMandatoryDescription
buttonsItemRestriction<SegmentButtonTextItem>YesButton information.

CapsuleSegmentButtonConstructionOptions

Represents options for creating a SegmentButton component consisting of single-select or multi-select buttons.

It inherits CommonSegmentButtonOptions.

Atomic service API: This API can be used in atomic services since API version 12.

System capability: SystemCapability.ArkUI.ArkUI.Full

Properties

NameTypeMandatoryDescription
buttonsSegmentButtonItemTupleYesButton information.
multiplybooleanNoWhether multiple items can be selected.
Default value: false

ItemRestriction

type ItemRestriction<T> = [T, T, T?, T?, T?]

Represents a tuple used to store button information.

Atomic service API: This API can be used in atomic services since API version 12.

System capability: SystemCapability.ArkUI.ArkUI.Full

TypeDescription
[T, T, T?, T?, T?]A tuple that contains two to five elements of the same type.

NOTE

A SegmentButton component supports two to five buttons.

SegmentButtonItemTuple

type SegmentButtonItemTuple = ItemRestriction<SegmentButtonTextItem>|ItemRestriction<SegmentButtonIconItem>|ItemRestriction<SegmentButtonIconTextItem>

Represents the tuple union type used to store button information.

Atomic service API: This API can be used in atomic services since API version 12.

System capability: SystemCapability.ArkUI.ArkUI.Full

TypeDescription
ItemRestriction<SegmentButtonTextItem>A tuple of text-only button information.
ItemRestriction<SegmentButtonIconItem>A tuple of icon-only button information.
ItemRestriction<SegmentButtonIconTextItem>A tuple of icon and text button information.

SegmentButtonItemArray

type SegmentButtonItemArray = Array<SegmentButtonTextItem>|Array<SegmentButtonIconItem>|Array<SegmentButtonIconTextItem>

Represents the array union type used to store button information.

Atomic service API: This API can be used in atomic services since API version 12.

System capability: SystemCapability.ArkUI.ArkUI.Full

TypeDescription
Array<SegmentButtonTextItem>An array of text-only button information.
Array<SegmentButtonIconItem>An array of icon-only button information.
Array<SegmentButtonIconTextItem>An array of icon and text button information.

SegmentButtonItemOptionsArray

Represents an array for storing button information.

Decorator Type: @Observed

NOTE

A SegmentButton component supports two to five buttons. As such, a SegmentButtonItemOptionsArray object stores information about only two to five buttons.

constructor

constructor(elements: SegmentButtonItemTuple)

A constructor used to create a SegmentButtonItemOptionsArray instance.

Atomic service API: This API can be used in atomic services since API version 12.

System capability: SystemCapability.ArkUI.ArkUI.Full

Parameters

NameTypeMandatoryDescription
elementsSegmentButtonItemTupleYesButton information.

push

push(...items: SegmentButtonItemArray): number

Adds the specified elements to the end of this array and returns the new length of the array.

Atomic service API: This API can be used in atomic services since API version 12.

System capability: SystemCapability.ArkUI.ArkUI.Full

Parameters

NameTypeMandatoryDescription
itemsSegmentButtonItemArrayYesElements to add to the end of the array.

Return value

TypeDescription
numberLength of the array after the elements are added.

NOTE

A SegmentButton component supports two to five buttons. As such, a SegmentButtonItemOptionsArray object stores information about only two to five buttons. If the number limit is reached, this API will not work.

pop

pop(): SegmentButtonItemOptions|undefined

Removes the last element from this array and returns that element.

Atomic service API: This API can be used in atomic services since API version 12.

System capability: SystemCapability.ArkUI.ArkUI.Full

Return value

TypeDescription
SegmentButtonItemOptions |undefinedElement removed from the array.

NOTE

A SegmentButton component supports two to five buttons. As such, a SegmentButtonItemOptionsArray object stores information about only two to five buttons. If the number limit is reached, this API will not work.

shift

shift(): SegmentButtonItemOptions|undefined

Removes the first element from this array and returns that element.

Atomic service API: This API can be used in atomic services since API version 12.

System capability: SystemCapability.ArkUI.ArkUI.Full

Return value

TypeDescription
SegmentButtonItemOptions |undefinedElement removed from the array.

NOTE

A SegmentButton component supports two to five buttons. As such, a SegmentButtonItemOptionsArray object stores information about only two to five buttons. If the number limit is reached, this API will not work.

unshift

unshift(...items: SegmentButtonItemArray): number

Adds the specified elements to the beginning of this array and returns the new length of the array.

Atomic service API: This API can be used in atomic services since API version 12.

System capability: SystemCapability.ArkUI.ArkUI.Full

Parameters

NameTypeMandatoryDescription
itemsSegmentButtonItemArrayYesElements to add to the beginning of the array.

Return value

TypeDescription
numberLength of the array after the elements are added.

NOTE

A SegmentButton component supports two to five buttons. As such, a SegmentButtonItemOptionsArray object stores information about only two to five buttons. If the number limit is reached, this API will not work.

splice

splice(start: number, deleteCount: number, ...items: SegmentButtonItemOptions[]): SegmentButtonItemOptions[]

Changes the contents of this array by removing the specified number of elements from the specified position and adding new elements in place. This API returns an array containing the removed elements.

Atomic service API: This API can be used in atomic services since API version 12.

System capability: SystemCapability.ArkUI.ArkUI.Full

Parameters

NameTypeMandatoryDescription
startnumberYesIndex of the position starting from which elements are to be removed.
deleteCountnumberYesNumber of elements to remove.
itemsSegmentButtonItemOptions[]NoElements to add to the array.

Return value

TypeDescription
SegmentButtonItemOptions[]An array containing the removed elements.

NOTE

A SegmentButton component supports two to five buttons. As such, a SegmentButtonItemOptionsArray object stores information about only two to five buttons. If the number limit is reached, this API will not work.

create

static create(elements: SegmentButtonItemTuple): SegmentButtonItemOptionsArray

Creates a SegmentButtonItemOptionsArray object.

Atomic service API: This API can be used in atomic services since API version 12.

System capability: SystemCapability.ArkUI.ArkUI.Full

Parameters

NameTypeMandatoryDescription
elementsSegmentButtonItemTupleYesButton information.

Return value

TypeDescription
SegmentButtonItemOptionsArrayCreated SegmentButtonItemOptionsArray object.

TabSegmentButtonOptions

Provides the options of the SegmentButton component consisting of tab-style buttons. It inherits TabSegmentButtonConstructionOptions.

Atomic service API: This API can be used in atomic services since API version 12.

System capability: SystemCapability.ArkUI.ArkUI.Full

NameTypeMandatoryDescription
type'tab'YesSegmentButton component consisting of tab-style buttons.

CapsuleSegmentButtonOptions

Provides the options of the SegmentButton component consisting of single-select or multi-select buttons. It inherits CapsuleSegmentButtonConstructionOptions.

Atomic service API: This API can be used in atomic services since API version 12.

System capability: SystemCapability.ArkUI.ArkUI.Full

NameTypeMandatoryDescription
type'capsule'YesSegmentButton component consisting of single-select or multi-select buttons.

SegmentButtonTextItem

Provides text button information.

System capability: SystemCapability.ArkUI.ArkUI.Full

NameTypeMandatoryDescription
textResourceStrYesButton text.
Atomic service API: This API can be used in atomic services since API version 12.
accessibilityLevel13+stringNoAccessibility level, which is used to set whether the current component can be recognized by accessibility services.
The options are as follows:
"auto": The component can be recognized by accessibility services.
"yes": The component can be recognized by accessibility services.
"no": The component cannot be recognized by accessibility services.
"no-hide-descendants": Neither the component nor its child components can be recognized by accessibility services.
Default value: "auto"
Atomic service API: This API can be used in atomic services since API version 13.
accessibilityDescription13+ResourceStrNoAccessibility description. You can specify further explanation of the current component, for example, possible operation consequences, especially those that cannot be learned from component attributes and accessibility text. If a component contains both text information and the accessibility description, the text is read first and then the accessibility description, when the component is selected.
Atomic service API: This API can be used in atomic services since API version 13.

SegmentButtonIconItem

Provides icon button information.

System capability: SystemCapability.ArkUI.ArkUI.Full

NameTypeMandatoryDescription
iconResourceStrYesIcon of the unselected item.
Atomic service API: This API can be used in atomic services since API version 12.
iconAccessibilityText13+ResourceStrNoAccessibility text of the unselected item.
Atomic service API: This API can be used in atomic services since API version 13.
selectedIconResourceStrYesIcon of the selected item.
Atomic service API: This API can be used in atomic services since API version 12.
selectedIconAccessibilityText13+ResourceStrNoAccessibility text of the selected item.
Atomic service API: This API can be used in atomic services since API version 13.
accessibilityLevel13+stringNoAccessibility level, which is used to set whether the current component can be recognized by accessibility services.
The options are as follows:
"auto": The component can be recognized by accessibility services.
"yes": The component can be recognized by accessibility services.
"no": The component cannot be recognized by accessibility services.
"no-hide-descendants": Neither the component nor its child components can be recognized by accessibility services.
Default value: "auto"
Atomic service API: This API can be used in atomic services since API version 13.
accessibilityDescription13+ResourceStrNoAccessibility description. You can specify further explanation of the current component, for example, possible operation consequences, especially those that cannot be learned from component attributes and accessibility text. If a component contains both text information and the accessibility description, the text is read first and then the accessibility description, when the component is selected.
Atomic service API: This API can be used in atomic services since API version 13.

NOTE

For the settings to take effect, both icon and selectedIcon must be set.

SegmentButtonIconTextItem

Provides icon+text button information.

System capability: SystemCapability.ArkUI.ArkUI.Full

Properties

NameTypeMandatoryDescription
iconResourceStrYesIcon of the unselected item.
Atomic service API: This API can be used in atomic services since API version 12.
iconAccessibilityText13+ResourceStrNoAccessibility text of the unselected item.
Atomic service API: This API can be used in atomic services since API version 13.
selectedIconResourceStrYesIcon of the selected item.
Atomic service API: This API can be used in atomic services since API version 12.
selectedIconAccessibilityText13+ResourceStrNoAccessibility text of the selected item.
Atomic service API: This API can be used in atomic services since API version 13.
textResourceStrYesButton text.
Atomic service API: This API can be used in atomic services since API version 12.
accessibilityLevel13+stringNoAccessibility level, which is used to set whether the current component can be recognized by accessibility services.
The options are as follows:
"auto": The component can be recognized by accessibility services.
"yes": The component can be recognized by accessibility services.
"no": The component cannot be recognized by accessibility services.
"no-hide-descendants": Neither the component nor its child components can be recognized by accessibility services.
Default value: "auto"
Atomic service API: This API can be used in atomic services since API version 13.
accessibilityDescription13+ResourceStrNoAccessibility description. You can specify further explanation of the current component, for example, possible operation consequences, especially those that cannot be learned from component attributes and accessibility text. If a component contains both text information and the accessibility description, the text is read first and then the accessibility description, when the component is selected.
Atomic service API: This API can be used in atomic services since API version 13.

NOTE

For the settings to take effect, both icon and selectedIcon must be set.

SegmentButtonItemOptions

Describes options of the items in the SegmentButton component.

Decorator Type: @Observed

System capability: SystemCapability.ArkUI.ArkUI.Full

Properties

NameTypeMandatoryDescription
iconResourceStrNoIcon of the unselected item.
Atomic service API: This API can be used in atomic services since API version 12.
iconAccessibilityText13+ResourceStrNoAccessibility text of the unselected item.
Atomic service API: This API can be used in atomic services since API version 13.
selectedIconResourceStrNoIcon of the selected item.
Atomic service API: This API can be used in atomic services since API version 12.
selectedIconAccessibilityText13+ResourceStrNoAccessibility text of the selected item.
Atomic service API: This API can be used in atomic services since API version 13.
textResourceStrNoButton text.
Atomic service API: This API can be used in atomic services since API version 12.
accessibilityLevel13+stringNoAccessibility level, which is used to set whether the current component can be recognized by accessibility services.
The options are as follows:
"auto": The component can be recognized by accessibility services.
"yes": The component can be recognized by accessibility services.
"no": The component cannot be recognized by accessibility services.
"no-hide-descendants": Neither the component nor its child components can be recognized by accessibility services.
Default value: "auto"
Atomic service API: This API can be used in atomic services since API version 13.
accessibilityDescription13+ResourceStrNoAccessibility description. You can specify further explanation of the current component, for example, possible operation consequences, especially those that cannot be learned from component attributes and accessibility text. If a component contains both text information and the accessibility description, the text is read first and then the accessibility description, when the component is selected.
Atomic service API: This API can be used in atomic services since API version 13.

constructor

constructor(options: SegmentButtonItemOptionsConstructorOptions)

A constructor used to create a SegmentButtonItemOptions instance.

Atomic service API: This API can be used in atomic services since API version 12.

System capability: SystemCapability.ArkUI.ArkUI.Full

Parameters

NameTypeMandatoryDescription
optionsSegmentButtonItemOptionsConstructorOptionsYesOptions of the items in the SegmentButton component.

SegmentButtonItemOptionsConstructorOptions

Describes the constructor parameters of SegmentButtonItemOptions.

System capability: SystemCapability.ArkUI.ArkUI.Full

Properties

NameTypeMandatoryDescription
iconResourceStrNoIcon of the unselected item.
Atomic service API: This API can be used in atomic services since API version 12.
iconAccessibilityText13+ResourceStrNoAccessibility text of the unselected item.
Atomic service API: This API can be used in atomic services since API version 13.
selectedIconResourceStrNoIcon of the selected item.
Atomic service API: This API can be used in atomic services since API version 12.
selectedIconAccessibilityText13+ResourceStrNoAccessibility text of the selected item.
Atomic service API: This API can be used in atomic services since API version 13.
textResourceStrNoButton text.
Atomic service API: This API can be used in atomic services since API version 12.
accessibilityLevel13+stringNoAccessibility level, which is used to set whether the current component can be recognized by accessibility services.
The options are as follows:
"auto": The component can be recognized by accessibility services.
"yes": The component can be recognized by accessibility services.
"no": The component cannot be recognized by accessibility services.
"no-hide-descendants": Neither the component nor its child components can be recognized by accessibility services.
Default value: "auto"
Atomic service API: This API can be used in atomic services since API version 13.
accessibilityDescription13+ResourceStrNoAccessibility description. You can specify further explanation of the current component, for example, possible operation consequences, especially those that cannot be learned from component attributes and accessibility text. If a component contains both text information and the accessibility description, the text is read first and then the accessibility description, when the component is selected.
Atomic service API: This API can be used in atomic services since API version 13.

Example

Example 1: Setting the Type of the SegmentButton component

This example demonstrates how to create two different types of SegmentButton components by configuring SegmentButtonOptions with tab and capsule types.

// xxx.ets
import {
  ItemRestriction,
  SegmentButton,
  SegmentButtonItemTuple,
  SegmentButtonOptions,
  SegmentButtonTextItem
} from '@kit.ArkUI';

@Entry
@Component
struct Index {
  @State tabOptions: SegmentButtonOptions = SegmentButtonOptions.tab({
    buttons: [{ text: 'Tab 1' }, { text: 'Tab 2' }, {
      text: 'Tab 3'
    }] as ItemRestriction<SegmentButtonTextItem>,
    backgroundBlurStyle: BlurStyle.BACKGROUND_THICK
  })
  @State singleSelectCapsuleOptions: SegmentButtonOptions = SegmentButtonOptions.capsule({
    buttons: [{ text: 'Single-select 1' }, { text: 'Single-select 2' }, { text: 'Single-select 3' }] as SegmentButtonItemTuple,
    multiply: false,
    backgroundBlurStyle: BlurStyle.BACKGROUND_THICK
  })
  @State multiplySelectCapsuleOptions: SegmentButtonOptions = SegmentButtonOptions.capsule({
    buttons: [{ text: 'Multi-select 1' }, { text: 'Multi-select 2' }, { text: 'Multi-select 3' }] as SegmentButtonItemTuple,
    multiply: true
  })
  @State iconCapsuleOptions: SegmentButtonOptions = SegmentButtonOptions.capsule({
    buttons: [
      { icon: $r('sys.media.ohos_ic_public_email'), selectedIcon: $r('sys.media.ohos_ic_public_clock') },
      { icon: $r('sys.media.ohos_ic_public_email'), selectedIcon: $r('sys.media.ohos_ic_public_clock') },
      { icon: $r('sys.media.ohos_ic_public_email'), selectedIcon: $r('sys.media.ohos_ic_public_clock') },
      { icon: $r('sys.media.ohos_ic_public_email'), selectedIcon: $r('sys.media.ohos_ic_public_clock') }
    ] as SegmentButtonItemTuple,
    multiply: false,
    backgroundBlurStyle: BlurStyle.BACKGROUND_THICK
  })
  @State iconTextCapsuleOptions: SegmentButtonOptions = SegmentButtonOptions.capsule({
    buttons: [
      { text: 'Icon 1', icon: $r('sys.media.ohos_ic_public_email'), selectedIcon: $r('sys.media.ohos_ic_public_clock') },
      { text: 'Icon 2', icon: $r('sys.media.ohos_ic_public_email'), selectedIcon: $r('sys.media.ohos_ic_public_clock') },
      { text: 'Icon 3', icon: $r('sys.media.ohos_ic_public_email'), selectedIcon: $r('sys.media.ohos_ic_public_clock') },
      { text: 'Icon 4', icon: $r('sys.media.ohos_ic_public_email'), selectedIcon: $r('sys.media.ohos_ic_public_clock') },
      { text: 'Icon 5', icon: $r('sys.media.ohos_ic_public_email'), selectedIcon: $r('sys.media.ohos_ic_public_clock') }
    ] as SegmentButtonItemTuple,
    multiply: true
  })
  @State tabSelectedIndexes: number[] = [1]
  @State singleSelectCapsuleSelectedIndexes: number[] = [0]
  @State multiplySelectCapsuleSelectedIndexes: number[] = [0, 1]
  @State singleSelectIconCapsuleSelectedIndexes: number[] = [3]
  @State multiplySelectIconTextCapsuleSelectedIndexes: number[] = [1, 2]

  build() {
    Row() {
      Column() {
        Column({ space: 25 }) {
          SegmentButton({ options: this.tabOptions,
            selectedIndexes: $tabSelectedIndexes })
          SegmentButton({ options: this.singleSelectCapsuleOptions,
            selectedIndexes: $singleSelectCapsuleSelectedIndexes })
          SegmentButton({
            options: this.multiplySelectCapsuleOptions,
            selectedIndexes: $multiplySelectCapsuleSelectedIndexes })
          SegmentButton({ options: this.iconCapsuleOptions,
            selectedIndexes: $singleSelectIconCapsuleSelectedIndexes })
          SegmentButton({ options: this.iconTextCapsuleOptions,
            selectedIndexes: $multiplySelectIconTextCapsuleSelectedIndexes })
        }.width('90%')
      }.width('100%')
    }.height('100%')
  }
}

segmentbutton-sample1

Example 2: Setting the Style of the SegmentButton component

This example demonstrates how to use CommonSegmentButtonOptions to customize the text and background style of the SegmentButton component.

// xxx.ets
import {
  ItemRestriction,
  SegmentButton,
  SegmentButtonItemTuple,
  SegmentButtonOptions,
  SegmentButtonTextItem
} from '@kit.ArkUI';

@Entry
@Component
struct Index {
  @State tabOptions: SegmentButtonOptions = SegmentButtonOptions.tab({
    buttons: [{ text: 'Tab 1' }, { text: 'Tab 2' }, {
      text: 'Tab 3'
    }] as ItemRestriction<SegmentButtonTextItem>,
    backgroundColor: 'rgb(213,213,213)',
    selectedBackgroundColor: 'rgb(112,112,112)',
    textPadding: {
      top: 10,
      right: 10,
      bottom: 10,
      left: 10
    },
  })
  @State singleSelectCapsuleOptions: SegmentButtonOptions = SegmentButtonOptions.capsule({
    buttons: [{ text: 'Single-select 1' }, { text: 'Single-select 2' }, { text: 'Single-select 3' }] as SegmentButtonItemTuple,
    multiply: false,
    fontColor: 'rgb(0,74,175)',
    selectedFontColor: 'rgb(247,247,247)',
    backgroundBlurStyle: BlurStyle.BACKGROUND_THICK
  })
  @State multiplySelectCapsuleOptions: SegmentButtonOptions = SegmentButtonOptions.capsule({
    buttons: [{ text: 'Multi-select 1' }, { text: 'Multi-select 2' }, { text: 'Multi-select 3' }] as SegmentButtonItemTuple,
    multiply: true,
    fontSize: 18,
    selectedFontSize: 18,
    fontWeight: FontWeight.Bolder,
    selectedFontWeight: FontWeight.Lighter,
  })
  @State iconCapsuleOptions: SegmentButtonOptions = SegmentButtonOptions.capsule({
    buttons: [
      { icon: $r('sys.media.ohos_ic_public_email'), selectedIcon: $r('sys.media.ohos_ic_public_clock') },
      { icon: $r('sys.media.ohos_ic_public_email'), selectedIcon: $r('sys.media.ohos_ic_public_clock') },
      { icon: $r('sys.media.ohos_ic_public_email'), selectedIcon: $r('sys.media.ohos_ic_public_clock') },
      { icon: $r('sys.media.ohos_ic_public_email'), selectedIcon: $r('sys.media.ohos_ic_public_clock') }
    ] as SegmentButtonItemTuple,
    multiply: false,
    imageSize: { width: 40, height: 40 },
    buttonPadding: {
      top: 6,
      right: 10,
      bottom: 6,
      left: 10
    },
    backgroundBlurStyle: BlurStyle.BACKGROUND_THICK
  })
  @State iconTextCapsuleOptions: SegmentButtonOptions = SegmentButtonOptions.capsule({
    buttons: [
      { text: 'Icon 1', icon: $r('sys.media.ohos_ic_public_email'), selectedIcon: $r('sys.media.ohos_ic_public_clock') },
      { text: 'Icon 2', icon: $r('sys.media.ohos_ic_public_email'), selectedIcon: $r('sys.media.ohos_ic_public_clock') },
      { text: 'Icon 3', icon: $r('sys.media.ohos_ic_public_email'), selectedIcon: $r('sys.media.ohos_ic_public_clock') },
      { text: 'Icon 4', icon: $r('sys.media.ohos_ic_public_email'), selectedIcon: $r('sys.media.ohos_ic_public_clock') },
      { text: 'Icon 5', icon: $r('sys.media.ohos_ic_public_email'), selectedIcon: $r('sys.media.ohos_ic_public_clock') }
    ] as SegmentButtonItemTuple,
    multiply: true,
    imageSize: { width: 10, height: 10 },
  })
  @State tabSelectedIndexes: number[] = [0]
  @State singleSelectCapsuleSelectedIndexes: number[] = [0]
  @State multiplySelectCapsuleSelectedIndexes: number[] = [0, 1]
  @State singleSelectIconCapsuleSelectedIndexes: number[] = [3]
  @State multiplySelectIconTextCapsuleSelectedIndexes: number[] = [1, 2]

  build() {
    Row() {
      Column() {
        Column({ space: 20 }) {
          SegmentButton({ options: this.tabOptions, selectedIndexes: $tabSelectedIndexes })
          SegmentButton({
            options: this.singleSelectCapsuleOptions,
            selectedIndexes: $singleSelectCapsuleSelectedIndexes
          })
          SegmentButton({
            options: this.multiplySelectCapsuleOptions,
            selectedIndexes: $multiplySelectCapsuleSelectedIndexes
          })
          SegmentButton({
            options: this.iconCapsuleOptions,
            selectedIndexes: $singleSelectIconCapsuleSelectedIndexes
          })
          SegmentButton({
            options: this.iconTextCapsuleOptions,
            selectedIndexes: $multiplySelectIconTextCapsuleSelectedIndexes
          })
        }.width('90%')
      }.width('100%')
    }.height('100%')
  }
}

segmentbutton-sample2

Example 3: Performing Array Operations on the SegmentButton Component

This example shows how to perform operations such as adding and removing segmented buttons using array functions like pop, shift, and unshift.

import {
  SegmentButton,
  SegmentButtonOptions,
  SegmentButtonItemOptionsArray,
  SegmentButtonItemTuple,
  SegmentButtonItemOptions
} from '@kit.ArkUI';

@Entry
@Component
struct Index {
  @State singleSelectCapsuleOptions: SegmentButtonOptions = SegmentButtonOptions.capsule({
    buttons: [{ text: '1' }, { text: '2' }, { text: '3' },
      { text: '4' }, { text: '5' }] as SegmentButtonItemTuple,
    multiply: false,
    backgroundBlurStyle: BlurStyle.BACKGROUND_THICK
  })
  @State capsuleSelectedIndexes: number[] = [0]

  build() {
    Row() {
      Column() {
        Column({ space: 10 }) {
          SegmentButton({ options: this.singleSelectCapsuleOptions,
            selectedIndexes: $capsuleSelectedIndexes })
          Button("Delete First Item")
            .onClick(() => {
              this.singleSelectCapsuleOptions.buttons.shift()
            })
          Button("Delete Last Item")
            .onClick(() => {
              this.singleSelectCapsuleOptions.buttons.pop()
            })
          Button("Add to End")
            .onClick(() => {
              this.singleSelectCapsuleOptions.buttons.push({ text: 'push' })
            })
          Button("Add to Beginning")
            .onClick(() => {
              this.singleSelectCapsuleOptions.buttons.unshift(({ text: 'unshift' }))
            })
          Button("Replace Items 2 and 3 with splice1 and splice2")
            .onClick(() => {
              this.singleSelectCapsuleOptions.buttons.splice(1, 2, new SegmentButtonItemOptions({
                text: 'splice1'
              }), new SegmentButtonItemOptions({ text: 'splice2' }))
            })
          Button("Change All Button Text")
            .onClick(() => {
              this.singleSelectCapsuleOptions.buttons =
              SegmentButtonItemOptionsArray.create([{ text: 'a' }, { text: 'b' },
                { text: 'c' }, { text: 'd' }, { text: 'e' }])
            })
        }.width('90%')
      }.width('100%')
    }.height('100%')
  }
}

segmentbutton-sample3

Example 4: Implementing a Mirroring Effect

This example shows how to implement a mirroring effect by configuring the direction property of the SegmentButton component.

// xxx.ets
import { LengthMetrics, SegmentButton, SegmentButtonOptions } from '@kit.ArkUI'


@Entry
@Component
struct Index {
  @State tabOptions: SegmentButtonOptions = SegmentButtonOptions.tab({
    buttons: [{ text: 'Tab 1' }, { text: 'Tab 2' }, {
      text: 'Tab 3'
    }],
    direction: Direction.Rtl,
    backgroundColor: Color.Green,
    selectedBackgroundColor: Color.Orange,
    localizedTextPadding: {
      end: LengthMetrics.vp(10),
      start: LengthMetrics.vp(10)
    },
  })
  @State singleSelectCapsuleOptions: SegmentButtonOptions = SegmentButtonOptions.capsule({
    buttons: [{ text: 'Single-select 1' }, { text: 'Single-select 2' }, { text: 'Single-select 3' }],
    multiply: false,
    direction: Direction.Rtl,
    fontColor: Color.Black,
    selectedFontColor: Color.Yellow,
    backgroundBlurStyle: BlurStyle.BACKGROUND_THICK
  })
  @State multiplySelectCapsuleOptions: SegmentButtonOptions = SegmentButtonOptions.capsule({
    buttons: [{ text: 'Multi-select 1' }, { text: 'Multi-select 2' }, { text: 'Multi-select 3' }],
    multiply: true,
    direction: Direction.Rtl,
    fontSize: 18,
    selectedFontSize: 18,
    fontWeight: FontWeight.Bolder,
    selectedFontWeight: FontWeight.Lighter,
  })
  @State iconCapsuleOptions: SegmentButtonOptions = SegmentButtonOptions.capsule({
    buttons: [
      { icon: $r('sys.media.ohos_ic_public_email'), selectedIcon: $r('sys.media.ohos_ic_public_clock') },
      { icon: $r('sys.media.ohos_ic_public_email'), selectedIcon: $r('sys.media.ohos_ic_public_clock') },
      { icon: $r('sys.media.ohos_ic_public_email'), selectedIcon: $r('sys.media.ohos_ic_public_clock') },
      { icon: $r('sys.media.ohos_ic_public_email'), selectedIcon: $r('sys.media.ohos_ic_public_clock') },
      { icon: $r('sys.media.ohos_ic_public_email'), selectedIcon: $r('sys.media.ohos_ic_public_clock') }
    ],
    multiply: false,
    direction: Direction.Rtl,
    imageSize: { width: 40, height: 40 },
    localizedButtonPadding: {
      end: LengthMetrics.vp(10),
      start: LengthMetrics.vp(10)
    },
    backgroundBlurStyle: BlurStyle.BACKGROUND_THICK
  })
  @State iconTextCapsuleOptions: SegmentButtonOptions = SegmentButtonOptions.capsule({
    buttons: [
      { text: 'Icon 1', icon: $r('sys.media.ohos_ic_public_email'), selectedIcon: $r('sys.media.ohos_ic_public_clock') },
      { text: 'Icon 2', icon: $r('sys.media.ohos_ic_public_email'), selectedIcon: $r('sys.media.ohos_ic_public_clock') },
      { text: 'Icon 3', icon: $r('sys.media.ohos_ic_public_email'), selectedIcon: $r('sys.media.ohos_ic_public_clock') },
      { text: 'Icon 4', icon: $r('sys.media.ohos_ic_public_email'), selectedIcon: $r('sys.media.ohos_ic_public_clock') },
      { text: 'Icon 5', icon: $r('sys.media.ohos_ic_public_email'), selectedIcon: $r('sys.media.ohos_ic_public_clock') }
    ],
    multiply: true,
    direction: Direction.Rtl,
    imageSize: { width: 10, height: 10 },
  })
  @State tabSelectedIndexes: number[] = [0]
  @State singleSelectCapsuleSelectedIndexes: number[] = [0]
  @State multiplySelectCapsuleSelectedIndexes: number[] = [0, 1]
  @State singleSelectIconCapsuleSelectedIndexes: number[] = [3]
  @State multiplySelectIconTextCapsuleSelectedIndexes: number[] = [1, 2]

  build() {
    Row() {
      Column() {
        Column({ space: 20 }) {
          SegmentButton({ options: this.tabOptions, selectedIndexes: $tabSelectedIndexes })
          SegmentButton({
            options: this.singleSelectCapsuleOptions,
            selectedIndexes: $singleSelectCapsuleSelectedIndexes
          })
          SegmentButton({
            options: this.multiplySelectCapsuleOptions,
            selectedIndexes: $multiplySelectCapsuleSelectedIndexes
          })
          SegmentButton({
            options: this.iconCapsuleOptions,
            selectedIndexes: $singleSelectIconCapsuleSelectedIndexes
          })
          SegmentButton({
            options: this.iconTextCapsuleOptions,
            selectedIndexes: $multiplySelectIconTextCapsuleSelectedIndexes
          })
        }.width('90%')
      }.width('100%')
    }.height('100%')
  }
}

segmentbutton-sample4

Example 5: Setting Accessibility

This example showcases how to implement accessibility features for the SegmentButton component by configuring properties such as accessibilityLevel and selectedIconAccessibilityText.

// xxx.ets
import {
  ItemRestriction,
  SegmentButton,
  SegmentButtonItemTuple,
  SegmentButtonOptions,
  SegmentButtonTextItem,
  SegmentButtonItemOptions
} from '@kit.ArkUI';

@Entry
@Component
struct Index {
  @State tabOptions: SegmentButtonOptions = SegmentButtonOptions.tab({
    buttons: [{ text: 'Tab 1', accessibilityLevel: 'yes', accessibilityDescription: 'Tab 1 usage hints' },
      { text: 'Tab 2', accessibilityLevel: 'yes', accessibilityDescription: 'Tab 2 usage hints' },
      { text: 'Tab 3', accessibilityLevel: 'yes', accessibilityDescription: 'Tab 3 usage hints'
    }] as ItemRestriction<SegmentButtonTextItem>,
    backgroundBlurStyle: BlurStyle.BACKGROUND_THICK
  })
  @State iconCapsuleOptions: SegmentButtonOptions = SegmentButtonOptions.capsule({
    buttons: [
      { icon: $r('sys.media.ohos_ic_public_email'), iconAccessibilityText: 'Accessibility text for the unselected icon',
        selectedIcon: $r('sys.media.ohos_ic_public_clock'), selectedIconAccessibilityText: 'Accessibility text for the selected icon',
      accessibilityLevel: 'yes', accessibilityDescription: 'SegmentButtonIconItem usage hints'},
      { icon: $r('sys.media.ohos_ic_public_email'), iconAccessibilityText: 'Accessibility text for the unselected icon',
        selectedIcon: $r('sys.media.ohos_ic_public_clock'), selectedIconAccessibilityText: 'Accessibility text for the selected icon',
        accessibilityLevel: 'yes', accessibilityDescription: 'SegmentButtonIconItem usage hints'},
      { icon: $r('sys.media.ohos_ic_public_email'), iconAccessibilityText: 'Accessibility text for the unselected icon',
        selectedIcon: $r('sys.media.ohos_ic_public_clock'), selectedIconAccessibilityText: 'Accessibility text for the selected icon',
        accessibilityLevel: 'yes', accessibilityDescription: 'SegmentButtonIconItem usage hints'},
      { icon: $r('sys.media.ohos_ic_public_email'), iconAccessibilityText: 'Accessibility text for the unselected icon',
        selectedIcon: $r('sys.media.ohos_ic_public_clock'), selectedIconAccessibilityText: 'Accessibility text for the selected icon',
        accessibilityLevel: 'yes', accessibilityDescription: 'SegmentButtonIconItem usage hints'}
    ] as SegmentButtonItemTuple,
    multiply: false,
    backgroundBlurStyle: BlurStyle.BACKGROUND_THICK
  })
  @State iconTextCapsuleOptions: SegmentButtonOptions = SegmentButtonOptions.capsule({
    buttons: [
      { text: 'Icon 1', icon: $r('sys.media.ohos_ic_public_email'), iconAccessibilityText: 'Accessibility text for the unselected icon',
        selectedIcon: $r('sys.media.ohos_ic_public_clock'), selectedIconAccessibilityText: 'Accessibility text for the selected icon',
        accessibilityLevel: 'yes', accessibilityDescription: 'SegmentButtonIconTextItem usage hints'},
      { text: 'Icon 1', icon: $r('sys.media.ohos_ic_public_email'), iconAccessibilityText: 'Accessibility text for the unselected icon',
        selectedIcon: $r('sys.media.ohos_ic_public_clock'), selectedIconAccessibilityText: 'Accessibility text for the selected icon',
        accessibilityLevel: 'yes', accessibilityDescription: 'SegmentButtonIconTextItem usage hints'},
      { text: 'Icon 1', icon: $r('sys.media.ohos_ic_public_email'), iconAccessibilityText: 'Accessibility text for the unselected icon',
        selectedIcon: $r('sys.media.ohos_ic_public_clock'), selectedIconAccessibilityText: 'Accessibility text for the selected icon',
        accessibilityLevel: 'yes', accessibilityDescription: 'SegmentButtonIconTextItem usage hints'},
      { text: 'Icon 1', icon: $r('sys.media.ohos_ic_public_email'), iconAccessibilityText: 'Accessibility text for the unselected icon',
        selectedIcon: $r('sys.media.ohos_ic_public_clock'), selectedIconAccessibilityText: 'Accessibility text for the selected icon',
        accessibilityLevel: 'yes', accessibilityDescription: 'SegmentButtonIconTextItem usage hints'}
    ] as SegmentButtonItemTuple,
    multiply: true
  })
  @State tabSelectedIndexes: number[] = [1]
  @State singleSelectIconCapsuleSelectedIndexes: number[] = [3]
  @State multiplySelectIconTextCapsuleSelectedIndexes: number[] = [1, 2]

  build() {
    Row() {
      Column() {
        Column({ space: 25 }) {
          SegmentButton({ options: this.tabOptions,
            selectedIndexes: $tabSelectedIndexes })
          SegmentButton({ options: this.iconCapsuleOptions,
            selectedIndexes: $singleSelectIconCapsuleSelectedIndexes })
          SegmentButton({ options: this.iconTextCapsuleOptions,
            selectedIndexes: $multiplySelectIconTextCapsuleSelectedIndexes })
          Button("Replace Items 2 and 3 with splice1 and splice2")
            .onClick(() => {
              this.iconTextCapsuleOptions.buttons.splice(1, 2, new SegmentButtonItemOptions({
                text: 'splice1', accessibilityLevel: 'yes', accessibilityDescription: 'SegmentButtonItemOptions usage hints'
              }), new SegmentButtonItemOptions({ text: 'splice2', icon: $r('sys.media.ohos_ic_public_email'),
                iconAccessibilityText: 'Accessibility text for the unselected icon', selectedIcon: $r('sys.media.ohos_ic_public_clock'),
                selectedIconAccessibilityText: 'Accessibility text for the selected icon', accessibilityLevel: 'yes',
                accessibilityDescription: 'SegmentButtonIconTextItem usage hints' }))
            })
        }.width('90%')
      }.width('100%')
    }.height('100%')
  }
}

你可能感兴趣的鸿蒙文章

harmony 鸿蒙ArcButton

harmony 鸿蒙ArcSlider

harmony 鸿蒙Chip

harmony 鸿蒙ChipGroup

harmony 鸿蒙ComposeListItem

harmony 鸿蒙ComposeTitleBar

harmony 鸿蒙advanced.Counter

harmony 鸿蒙Dialog Box (Dialog)

harmony 鸿蒙DialogV2

harmony 鸿蒙DownloadFileButton

  • 所属分类: 后端技术
  • 本文标签: 鸿蒙 软件
  • 版权声明: 本文链接 https://seaxiang.com/blog/rQ7TbR