A text picker dialog box is a dialog box that allows users to select text from the given range.
This component is supported since API version 8. Updates will be marked with a superscript to indicate their earliest API version.
The functionality of this module depends on UI context. This means that the APIs of this module cannot be used where the UI context is ambiguous. For details, see UIContext.
This module does not support dynamic updates for color mode (light or dark) changes. To apply a new color mode, close and reopen the dialog box.
The maximum number of rows that can be displayed varies by screen orientation: In portrait mode, the default number of rows is 5. In landscape mode, the number of rows depends on the system configuration. If no system configuration is set, the default is 3 rows. To check the specific system configuration value for landscape mode, use $r('sys.float.ohos_id_picker_show_count_landscape').
static show(options?: TextPickerDialogOptions)
Shows a text picker in the given settings.
This API is supported since API version 8 and deprecated since API version 18. You are advised to use showTextPickerDialog instead. showTextPickerDialog can be called only after a UIContext instance is obtained.
Since API version 10, you can use the showTextPickerDialog API in UIContext, which ensures that the text picker dialog box is shown in the intended UI instance.
Atomic service API: This API can be used in atomic services since API version 11.
System capability: SystemCapability.ArkUI.ArkUI.Full
Device behavior differences: On wearables, calling this API results in a runtime exception indicating that the API is undefined. On other devices, the API works correctly.
Parameters
| Name | Type | Mandatory | Description |
|---|---|---|---|
| options | TextPickerDialogOptions | No | Parameters of the text picker dialog box. |
Inherits from TextPickerOptions.
System capability: SystemCapability.ArkUI.ArkUI.Full
Device behavior differences: On wearables, calling this API results in a runtime exception indicating that the API is undefined. On other devices, the API works correctly.
| Name | Type | Read Only | Optional | Description |
|---|---|---|---|---|
| defaultPickerItemHeight | number | string | No | Yes | Height of the picker item. For the number type, the value range is [0, +∞). For the string type, only numeric string values, for example, "56", are supported. Default value: 56 vp (selected) and 36 vp (unselected). The set value applies to both selected and unselected items. Atomic service API: This API can be used in atomic services since API version 11. |
| disappearTextStyle10+ | PickerTextStyle | No | Yes | Text color, font size, and font weight of edge items (the second item above or below the selected item). Default value: { color: '#ff182431', font: { size: '14fp', weight: FontWeight.Regular } } Atomic service API: This API can be used in atomic services since API version 11. |
| textStyle10+ | PickerTextStyle | No | Yes | Text color, font size, and font weight of candidate items (the first item immediately above or below the selected item). Default value: { color: '#ff182431', font: { size: '16fp', weight: FontWeight.Regular } } Atomic service API: This API can be used in atomic services since API version 11. |
| selectedTextStyle10+ | PickerTextStyle | No | Yes | Text color, font size, and font weight of the selected item. Default value: { color: '#ff007dff', font: { size: '20fp', weight: FontWeight.Medium } } Atomic service API: This API can be used in atomic services since API version 11. |
| acceptButtonStyle12+ | PickerDialogButtonStyle | No | Yes | Style of the accept button. NOTE 1. In acceptButtonStyle and cancelButtonStyle, at most one primary field can be set to true. If both are set to true, the primary field will remain at the default value of false. 2. The default button height is 40 vp and remains fixed even in accessibility and large-font modes. In addition, even if the button style is set to ROUNDED_RECTANGLE, the displayed effect is still a capsule button (Capsule). Atomic service API: This API can be used in atomic services since API version 12. |
| cancelButtonStyle12+ | PickerDialogButtonStyle | No | Yes | Style of the cancel button. NOTE 1. In acceptButtonStyle and cancelButtonStyle, at most one primary field can be set to true. If both are set to true, the primary field will remain at the default value of false. 2. The default button height is 40 vp and remains fixed even in accessibility and large-font modes. In addition, even if the button style is set to ROUNDED_RECTANGLE, the displayed effect is still a capsule button (Capsule). Atomic service API: This API can be used in atomic services since API version 12. |
| canLoop10+ | boolean | No | Yes | Whether to enable loop scrolling. - true: Enable loop scrolling. - false: Disable loop scrolling. Default value: true. Atomic service API: This API can be used in atomic services since API version 11. |
| alignment10+ | DialogAlignment | No | Yes | Alignment mode of the dialog box in the vertical direction. Default value: DialogAlignment.Default Atomic service API: This API can be used in atomic services since API version 11. |
| offset10+ | Offset | No | Yes | Offset of the dialog box based on the alignment settings. Default value: { dx: 0 , dy: 0 } Atomic service API: This API can be used in atomic services since API version 11. |
| maskRect10+ | Rectangle | No | Yes | Mask area of the dialog box. Events outside the mask area are transparently transmitted, and events within the mask area are not. Default value: { x: 0, y: 0, width: '100%', height: '100%' } Atomic service API: This API can be used in atomic services since API version 11. |
| onAccept | (value: TextPickerResult) => void | No | Yes | Triggered when the OK button in the dialog box is clicked. Atomic service API: This API can be used in atomic services since API version 11. |
| onCancel | () => void | No | Yes | Triggered when the Cancel button in the dialog box is clicked. Atomic service API: This API can be used in atomic services since API version 11. |
| onChange | (value: TextPickerResult) => void | No | Yes | Triggered when the text picker in the dialog box snaps to the selected item. This callback is triggered only after the scroll animation completes. To obtain real-time index changes, use onEnterSelectedArea instead. Atomic service API: This API can be used in atomic services since API version 11. |
| onScrollStop14+ | Callback<TextPickerResult> | No | Yes | Triggered when the scrolling in the text picker of the dialog box stops. Atomic service API: This API can be used in atomic services since API version 14. |
| backgroundColor11+ | ResourceColor | No | Yes | Backplane color of the dialog box. Default value: Color.Transparent NOTE When backgroundColor is set to a non-transparent color, backgroundBlurStyle must be set to BlurStyle.NONE; otherwise, the color display may not meet the expected effect. Atomic service API: This API can be used in atomic services since API version 12. |
| backgroundBlurStyle11+ | BlurStyle | No | Yes | Background blur style of the dialog box. Default value: BlurStyle.COMPONENT_ULTRA_THICK NOTE Setting this parameter to BlurStyle.NONE disables the background blur. When backgroundBlurStyle is set to a value other than NONE, do not set backgroundColor. If you do, the color display may not produce the expected visual effect. Atomic service API: This API can be used in atomic services since API version 12. |
| backgroundBlurStyleOptions19+ | BackgroundBlurStyleOptions | No | Yes | Options for customizing the background blur style. Atomic service API: This API can be used in atomic services since API version 19. |
| backgroundEffect19+ | BackgroundEffectOptions | No | Yes | Options for customizing the background effect. Atomic service API: This API can be used in atomic services since API version 19. |
| onDidAppear12+ | () => void | No | Yes | Event callback after the dialog box appears. NOTE 1. The normal timing sequence is as follows: onWillAppear > onDidAppear > (onAccept/onCancel/onChange/onScrollStop) > onWillDisappear > onDidDisappear. 2. You can set the callback event for changing the dialog box display effect in onDidAppear. The settings take effect next time the dialog box appears. 3. If the user closes the dialog box immediately after it appears, onWillDisappear is invoked before onDidAppear. 4. If the dialog box is closed before its entrance animation is finished, this callback is not invoked. Atomic service API: This API can be used in atomic services since API version 12. |
| onDidDisappear12+ | () => void | No | Yes | Event callback after the dialog box disappears. NOTE 1. The normal timing sequence is as follows: onWillAppear > onDidAppear > (onAccept/onCancel/onChange/onScrollStop) > onWillDisappear > onDidDisappear. Atomic service API: This API can be used in atomic services since API version 12. |
| onWillAppear12+ | () => void | No | Yes | Event callback when the dialog box is about to appear. NOTE 1. The normal timing sequence is as follows: onWillAppear > onDidAppear > (onAccept/onCancel/onChange/onScrollStop) > onWillDisappear > onDidDisappear. 2. You can set the callback event for changing the dialog box display effect in onWillAppear. The settings take effect next time the dialog box appears. Atomic service API: This API can be used in atomic services since API version 12. |
| onWillDisappear12+ | () => void | No | Yes | Event callback when the dialog box is about to disappear. NOTE 1. The normal timing sequence is as follows: onWillAppear > onDidAppear > (onAccept/onCancel/onChange/onScrollStop) > onWillDisappear > onDidDisappear. 2. If the user closes the dialog box immediately after it appears, onWillDisappear is invoked before onDidAppear. Atomic service API: This API can be used in atomic services since API version 12. |
| shadow12+ | ShadowOptions | ShadowStyle | No | Yes | Shadow of the dialog box. Default value on 2-in-1 devices: ShadowStyle.OUTER_FLOATING_MD when the dialog box is focused and ShadowStyle.OUTER_FLOATING_SM otherwise Atomic service API: This API can be used in atomic services since API version 12. |
| enableHoverMode14+ | boolean | No | Yes | Whether to respond when the device is in semi-folded mode. - true: Respond when the device is in semi-folded mode. - false: Do not respond when the device is in semi-folded mode. Default value: false. Atomic service API: This API can be used in atomic services since API version 14. |
| hoverModeArea14+ | HoverModeAreaType | No | Yes | Display area of the dialog box when the device is in semi-folded mode. Default value: HoverModeAreaType.BOTTOM_SCREEN Atomic service API: This API can be used in atomic services since API version 14. |
| disableTextStyleAnimation15+ | boolean | No | Yes | Whether to disable the animation effect of text style changes during scrolling. - true: Disable the animation effect of text style changes. - false: Do not disable the animation effect of text style changes. Default value: false. NOTE When this API is used with true, there are no text style changes, including the font size, weight, and color, during scrolling, and all text is displayed in the style set by defaultTextStyle. If defaultTextStyle is not set, the default style of the Text component is used. Atomic service API: This API can be used in atomic services since API version 15. |
| defaultTextStyle15+ | TextPickerTextStyle | No | Yes | Style of the text items when the text style change animation during the scrolling process is disabled. It is effective only when disableTextStyleAnimation is true. Default value: same as the default value of the Text component Atomic service API: This API can be used in atomic services since API version 15. |
| onEnterSelectedArea18+ | Callback<TextPickerResult> | No | Yes | Represents the callback triggered during the scrolling of the text picker when an item enters the divider area. Compared to the onChange event, this event is triggered earlier, specifically when the scroll distance of the current column exceeds half the height of the selected item, which indicates that the item has entered the divider area. NOTE In scenarios where the picker contains linked columns, the use of this callback is not recommended. The reason is that it identifies nodes where items enter the divider area during scrolling. However, items that change in response to the scrolling do not themselves scroll. As a result, the callback's return values will only reflect changes for the currently scrolling column, while other non-scrolling columns will remain unchanged. Atomic service API: This API can be used in atomic services since API version 18. |
| enableHapticFeedback18+ | boolean | No | Yes | Whether to enable haptic feedback. - true: Enable haptic feedback. - false: Disable haptic feedback. Default value: true. Atomic service API: This API can be used in atomic services since API version 18. NOTE 1. Whether this parameter takes effect after being set to true depends on hardware support. 2. To enable haptic feedback, you must declare the following permission under requestPermissions in module in src/main/module.json5 of the project. "requestPermissions": [{"name": "ohos.permission.VIBRATE"}] |
| selectedBackgroundStyle20+ | PickerBackgroundStyle | No | Yes | Background color of the selected item. Default value: { color: $r('sys.color.comp_background_tertiary'), borderRadius: $r('sys.float.corner_radius_level12') } Atomic service API: This API can be used in atomic services since API version 20. |
Inherits from TextPickerOptions.
Atomic service API: This API can be used in atomic services since API version 20.
System capability: SystemCapability.ArkUI.ArkUI.Full
Device behavior differences: On wearables, calling this API results in a runtime exception indicating that the API is undefined. On other devices, the API works correctly.
| Name | Type | Read Only | Optional | Description |
|---|---|---|---|---|
| defaultPickerItemHeight | number | string | No | Yes | Height of the picker item. For the number type, the value range is [0, +∞). For the string type, only numeric string values, for example, "56", are supported. Default value: 56 vp (selected) and 36 vp (unselected). The set value applies to both selected and unselected items. |
| acceptButtonStyle | PickerDialogButtonStyle | No | Yes | Style of the accept button. NOTE 1. In acceptButtonStyle and cancelButtonStyle, at most one primary field can be set to true. If both are set to true, the primary field will remain at the default value of false. 2. The default button height is 40 vp and remains fixed even in accessibility and large-font modes. In addition, even if the button style is set to ROUNDED_RECTANGLE, the displayed effect is still a capsule button (Capsule). |
| cancelButtonStyle | PickerDialogButtonStyle | No | Yes | Style of the cancel button. NOTE 1. In acceptButtonStyle and cancelButtonStyle, at most one primary field can be set to true. If both are set to true, the primary field will remain at the default value of false. 2. The default button height is 40 vp and remains fixed even in accessibility and large-font modes. In addition, even if the button style is set to ROUNDED_RECTANGLE, the displayed effect is still a capsule button (Capsule). |
| canLoop | boolean | No | Yes | Whether to enable loop scrolling. - true: Enable loop scrolling. - false: Disable loop scrolling. Default value: true. |
| alignment | DialogAlignment | No | Yes | Alignment mode of the dialog box in the vertical direction. Default value: DialogAlignment.Default |
| offset | Offset | No | Yes | Offset of the dialog box based on the alignment settings. Default value: { dx: 0 , dy: 0 } |
| maskRect | Rectangle | No | Yes | Mask area of the dialog box. Events outside the mask area are transparently transmitted, and events within the mask area are not. Default value: { x: 0, y: 0, width: '100%', height: '100%' } |
| onAccept | Callback<TextPickerResult> | No | Yes | Triggered when the OK button in the dialog box is clicked. |
| onCancel | VoidCallback | No | Yes | Triggered when the Cancel button in the dialog box is clicked. |
| onChange | Callback<TextPickerResult> | No | Yes | Triggered when the text picker in the dialog box snaps to the selected item. This callback is triggered only after the scroll animation completes. To obtain real-time index changes, use onEnterSelectedArea instead. |
| onScrollStop | Callback<TextPickerResult> | No | Yes | Triggered when the scrolling in the text picker of the dialog box stops. |
| backgroundColor | ResourceColor | No | Yes | Backplane color of the dialog box. Default value: Color.Transparent NOTE When backgroundColor is set to a non-transparent color, backgroundBlurStyle must be set to BlurStyle.NONE; otherwise, the color display may not meet the expected effect. |
| backgroundBlurStyle | BlurStyle | No | Yes | Background blur style of the dialog box. Default value: BlurStyle.COMPONENT_ULTRA_THICK NOTE Setting this parameter to BlurStyle.NONE disables the background blur. When backgroundBlurStyle is set to a value other than NONE, do not set backgroundColor. If you do, the color display may not produce the expected visual effect. |
| backgroundBlurStyleOptions | BackgroundBlurStyleOptions | No | Yes | Options for customizing the background blur style. Atomic service API: This API can be used in atomic services since API version 20. |
| backgroundEffect | BackgroundEffectOptions | No | Yes | Options for customizing the background effect. |
| onDidAppear | VoidCallback | No | Yes | Event callback after the dialog box appears. NOTE 1. The normal timing sequence is as follows: onWillAppear > onDidAppear > (onAccept/onCancel/onChange/onScrollStop) > onWillDisappear > onDidDisappear. 2. You can set the callback event for changing the dialog box display effect in onDidAppear. The settings take effect next time the dialog box appears. 3. If the user closes the dialog box immediately after it appears, onWillDisappear is invoked before onDidAppear. 4. If the dialog box is closed before its entrance animation is finished, this callback is not invoked. |
| onDidDisappear | VoidCallback | No | Yes | Event callback after the dialog box disappears. NOTE 1. The normal timing sequence is as follows: onWillAppear > onDidAppear > (onAccept/onCancel/onChange/onScrollStop) > onWillDisappear > onDidDisappear. |
| onWillAppear | VoidCallback | No | Yes | Event callback when the dialog box is about to appear. NOTE 1. The normal timing sequence is as follows: onWillAppear > onDidAppear > (onAccept/onCancel/onChange/onScrollStop) > onWillDisappear > onDidDisappear. 2. You can set the callback event for changing the dialog box display effect in onWillAppear. The settings take effect next time the dialog box appears. |
| onWillDisappear | VoidCallback | No | Yes | Event callback when the dialog box is about to disappear. NOTE 1. The normal timing sequence is as follows: onWillAppear > onDidAppear > (onAccept/onCancel/onChange/onScrollStop) > onWillDisappear > onDidDisappear. 2. If the user closes the dialog box immediately after it appears, onWillDisappear is invoked before onDidAppear. |
| shadow | ShadowOptions | ShadowStyle | No | Yes | Shadow of the dialog box. Default value on 2-in-1 devices: ShadowStyle.OUTER_FLOATING_MD when the dialog box is focused and ShadowStyle.OUTER_FLOATING_SM otherwise |
| enableHoverMode | boolean | No | Yes | Whether to respond when the device is in semi-folded mode. - true: Respond when the device is in semi-folded mode. - false: Do not respond when the device is in semi-folded mode. Default value: false |
| hoverModeArea | HoverModeAreaType | No | Yes | Display area of the dialog box when the device is in semi-folded mode. Default value: HoverModeAreaType.BOTTOM_SCREEN |
| disableTextStyleAnimation | boolean | No | Yes | Whether to disable the animation effect of text style changes during scrolling. - true: Disable the animation effect of text style changes. - false: Do not disable the animation effect of text style changes. Default value: false. NOTE When this API is used with true, there are no text style changes, including the font size, weight, and color, during scrolling, and all text is displayed in the style set by defaultTextStyle. If defaultTextStyle is not set, the default style of the Text component is used. |
| defaultTextStyle | TextPickerTextStyle | No | Yes | Style of the text items when the text style change animation during the scrolling process is disabled. It is effective only when disableTextStyleAnimation is true. Default value: same as the default value of the Text component |
| onEnterSelectedArea | Callback<TextPickerResult> | No | Yes | Represents the callback triggered during the scrolling of the text picker when an item enters the divider area. Compared to the onChange event, this event is triggered earlier, specifically when the scroll distance of the current column exceeds half the height of the selected item, which indicates that the item has entered the divider area. NOTE In scenarios where the picker contains linked columns, the use of this callback is not recommended. The reason is that it identifies nodes where items enter the divider area during scrolling. However, items that change in response to the scrolling do not themselves scroll. As a result, the callback's return values will only reflect changes for the currently scrolling column, while other non-scrolling columns will remain unchanged. |
| enableHapticFeedback | boolean | No | Yes | Whether to enable haptic feedback. - true: Enable haptic feedback. - false: Disable haptic feedback. Default value: true. NOTE 1. Whether this parameter takes effect after being set to true depends on hardware support. 2. To enable haptic feedback, you must declare the following permission under requestPermissions in module in src/main/module.json5 of the project. "requestPermissions": [{"name": "ohos.permission.VIBRATE"}] |
| selectedBackgroundStyle | PickerBackgroundStyle | No | Yes | Background color of the selected item. Default value: { color: $r('sys.color.comp_background_tertiary'), borderRadius: $r('sys.float.corner_radius_level12') } |
| disappearTextStyle | TextPickerTextStyle | No | Yes | Style of edge items (the second item above or below the selected item), covering the following: text color, font size, font weight, maximum font size, minimum font size, text overflow mode. Default value: { color: '#ff182431', font: { size: '14fp', weight: FontWeight.Regular }, minFontSize: 0, maxFontSize: 0, overflow: TextOverflow.CLIP } |
| textStyle | TextPickerTextStyle | No | Yes | Style of candidate items (the first item immediately above or below the selected item), covering the following: text color, font size, font weight, maximum font size, minimum font size, text overflow mode. Default value: { color: '#ff182431', font: { size: '16fp', weight: FontWeight.Regular }, minFontSize: 0, maxFontSize: 0, overflow: TextOverflow.CLIP } |
| selectedTextStyle | TextPickerTextStyle | No | Yes | Style of the selected item, covering the following: text color, font size, font weight, maximum font size, minimum font size, text overflow mode. Default value: { color: '#ff007dff', font: { size: '20fp', weight: FontWeight.Medium }, minFontSize: 0, maxFontSize: 0, overflow: TextOverflow.CLIP } |
Represents the selection result of a TextPicker component.
Atomic service API: This API can be used in atomic services since API version 11.
System capability: SystemCapability.ArkUI.ArkUI.Full
Device behavior differences: On wearables, calling this API results in a runtime exception indicating that the API is undefined. On other devices, the API works correctly.
| Name | Type | Read Only | Optional | Description |
|---|---|---|---|---|
| value | string | string []10+ | No | No | Text of the selected item. NOTE When the picker contains text only or both text and imagery, value indicates the text value of the selected item. (For a multi-column picker, value is of the array type.) For an image list, value is empty. The value cannot contain the following escape character: \ |
| index | number | number []10+ | No | No | Index of the selected item in the range. The index is zero-based. (For a multi-column picker, index is of the array type.) |
For clarity in UI execution context, you are advised to use the showTextPickerDialog API in UIContext.
This example demonstrates how to display a text picker dialog box when a button is touched.
// xxx.ets
@Entry
@Component
struct TextPickerDialogExample {
private select: number | number[] = 0;
private fruits: string[] = ['apple1', 'orange2', 'peach3', 'grape4', 'banana5'];
@State selectedValue: string = '';
build() {
Row() {
Column() {
Button('TextPickerDialog:' + this.selectedValue)
.margin(20)
.onClick(() => {
this.getUIContext().showTextPickerDialog({
range: this.fruits,
selected: this.select,
value: this.selectedValue,
defaultPickerItemHeight: 40,
onAccept: (value: TextPickerResult) => {
// Set select to the index of the item selected when the OK button is touched. In this way, when the text picker dialog box is displayed again, the selected item is the one last confirmed.
this.select = value.index;
console.info(this.select + '');
// After OK is clicked, the selected item is displayed on the page.
this.selectedValue = value.value as string;
console.info('TextPickerDialog:onAccept()' + JSON.stringify(value));
},
onCancel: () => {
console.info('TextPickerDialog:onCancel()');
},
onChange: (value: TextPickerResult) => {
console.info('TextPickerDialog:onChange()' + JSON.stringify(value));
},
onScrollStop: (value: TextPickerResult) => {
console.info('TextPickerDialog:onScrollStop()' + JSON.stringify(value));
},
onDidAppear: () => {
console.info('TextPickerDialog:onDidAppear()');
},
onDidDisappear: () => {
console.info('TextPickerDialog:onDidDisappear()');
},
onWillAppear: () => {
console.info('TextPickerDialog:onWillAppear()');
},
onWillDisappear: () => {
console.info('TextPickerDialog:onWillDisappear()');
}
});
})
}.width('100%')
}.height('100%')
}
} 
In this example, disappearTextStyle, textStyle, selectedTextStyle, acceptButtonStyle, and cancelButtonStyle are configured to customize the text and button style.
// xxx.ets
@Entry
@Component
struct TextPickerDialogExample {
private select: number | number[] = 0;
private fruits: string[] = ['apple1', 'orange2', 'peach3', 'grape4', 'banana5'];
@State selectedValue: string = '';
build() {
Row() {
Column() {
Button('TextPickerDialog:' + this.selectedValue)
.margin(20)
.onClick(() => {
this.getUIContext().showTextPickerDialog({
range: this.fruits,
selected: this.select,
disappearTextStyle: { color: '#297bec', font: { size: 15, weight: FontWeight.Lighter } },
textStyle: { color: Color.Black, font: { size: 20, weight: FontWeight.Normal } },
selectedTextStyle: { color: Color.Blue, font: { size: 30, weight: FontWeight.Bolder } },
acceptButtonStyle: {
type: ButtonType.Normal,
style: ButtonStyleMode.NORMAL,
role: ButtonRole.NORMAL,
fontColor: 'rgb(81, 81, 216)',
fontSize: '26fp',
fontWeight: FontWeight.Bolder,
fontStyle: FontStyle.Normal,
fontFamily: 'sans-serif',
backgroundColor: '#A6ACAF',
borderRadius: 20
},
cancelButtonStyle: {
type: ButtonType.Normal,
style: ButtonStyleMode.NORMAL,
role: ButtonRole.NORMAL,
fontColor: Color.Blue,
fontSize: '16fp',
fontWeight: FontWeight.Normal,
fontStyle: FontStyle.Italic,
fontFamily: 'sans-serif',
backgroundColor: '#50182431',
borderRadius: 10
},
onAccept: (value: TextPickerResult) => {
// Set select to the index of the item selected when the OK button is touched. In this way, when the text picker dialog box is displayed again, the selected item is the one last confirmed.
this.select = value.index;
console.info(this.select + '');
// After OK is clicked, the selected item is displayed on the page.
this.selectedValue = value.value as string;
console.info('TextPickerDialog:onAccept()' + JSON.stringify(value));
},
onCancel: () => {
console.info('TextPickerDialog:onCancel()');
},
onChange: (value: TextPickerResult) => {
console.info('TextPickerDialog:onChange()' + JSON.stringify(value));
},
onScrollStop: (value: TextPickerResult) => {
console.info('TextPickerDialog:onScrollStop()' + JSON.stringify(value));
},
onDidAppear: () => {
console.info('TextPickerDialog:onDidAppear()');
},
onDidDisappear: () => {
console.info('TextPickerDialog:onDidDisappear()');
},
onWillAppear: () => {
console.info('TextPickerDialog:onWillAppear()');
},
onWillDisappear: () => {
console.info('TextPickerDialog:onWillDisappear()');
}
});
})
}.width('100%')
}.height('100%')
}
} 
This example demonstrates how to set the layout area of a dialog box when the device is in semi-folded mode.
@Entry
@Component
struct TextPickerDialogExample {
private select: number | number[] = 0;
private fruits: string[] = ['apple1', 'orange2', 'peach3', 'grape4', 'banana5'];
@State selectedValue: string = '';
build() {
Row() {
Column() {
Button('TextPickerDialog:' + this.selectedValue)
.margin(20)
.onClick(() => {
this.getUIContext().showTextPickerDialog({
range: this.fruits,
selected: this.select,
disappearTextStyle: { color: Color.Red, font: { size: 15, weight: FontWeight.Lighter }},
textStyle: { color: Color.Black, font: { size: 20, weight: FontWeight.Normal }},
selectedTextStyle: { color: Color.Blue, font: { size: 30, weight: FontWeight.Bolder }},
onAccept: (value: TextPickerResult) => {
// Set select to the index of the item selected when the OK button is touched. In this way, when the text picker dialog box is displayed again, the selected item is the one last confirmed.
this.select = value.index;
console.info(this.select + '');
// After OK is clicked, the selected item is displayed on the page.
this.selectedValue = value.value as string;
console.info('TextPickerDialog:onAccept()' + JSON.stringify(value));
},
onCancel: () => {
console.info('TextPickerDialog:onCancel()');
},
onChange: (value: TextPickerResult) => {
console.info('TextPickerDialog:onChange()' + JSON.stringify(value));
},
onScrollStop: (value: TextPickerResult) => {
console.info('TextPickerDialog:onScrollStop()' + JSON.stringify(value));
},
onDidAppear: () => {
console.info('TextPickerDialog:onDidAppear()');
},
onDidDisappear: () => {
console.info('TextPickerDialog:onDidDisappear()');
},
onWillAppear: () => {
console.info('TextPickerDialog:onWillAppear()');
},
onWillDisappear: () => {
console.info('TextPickerDialog:onWillDisappear()');
},
enableHoverMode: true,
hoverModeArea: HoverModeAreaType.TOP_SCREEN
});
})
}.width('100%')
}.height('100%')
}
} 
This example demonstrates how to set the position of a dialog box using alignment and offset.
// xxx.ets
@Entry
@Component
struct TextPickerDialogExample {
private select: number | number[] = 0;
private fruits: string[] = ['apple1', 'orange2', 'peach3', 'grape4', 'banana5'];
@State selectedValue: string = '';
build() {
Row() {
Column() {
Button('TextPickerDialog:' + this.selectedValue)
.margin(20)
.onClick(() => {
this.getUIContext().showTextPickerDialog({
range: this.fruits,
selected: this.select,
alignment: DialogAlignment.Center,
offset: { dx: 20, dy: 0 },
onAccept: (value: TextPickerResult) => {
// Set select to the index of the item selected when the OK button is touched. In this way, when the text picker dialog box is displayed again, the selected item is the one last confirmed.
this.select = value.index;
console.info(this.select + '');
// After OK is clicked, the selected item is displayed on the page.
this.selectedValue = value.value as string;
console.info('TextPickerDialog:onAccept()' + JSON.stringify(value));
}
});
})
}.width('100%')
}.height('100%')
}
} 
This example demonstrates how to set the mask area using maskRect.
// xxx.ets
@Entry
@Component
struct TextPickerDialogExample {
private select: number | number[] = 0;
private fruits: string[] = ['apple1', 'orange2', 'peach3', 'grape4', 'banana5'];
@State selectedValue: string = '';
build() {
Row() {
Column() {
Button('TextPickerDialog:' + this.selectedValue)
.margin(20)
.onClick(() => {
this.getUIContext().showTextPickerDialog({
range: this.fruits,
selected: this.select,
maskRect: {
x: 30,
y: 60,
width: '100%',
height: '60%'
},
onAccept: (value: TextPickerResult) => {
// Set select to the index of the item selected when the OK button is touched. In this way, when the text picker dialog box is displayed again, the selected item is the one last confirmed.
this.select = value.index;
console.info(this.select + '');
// After OK is clicked, the selected item is displayed on the page.
this.selectedValue = value.value as string;
console.info('TextPickerDialog:onAccept()' + JSON.stringify(value));
}
});
})
}.width('100%')
}.height('100%')
}
} 
This example demonstrates how to set the dialog box background using backgroundColor, backgroundBlurStyle, and shadow.
// xxx.ets
@Entry
@Component
struct TextPickerDialogExample {
private select: number | number[] = 0;
private fruits: string[] = ['apple1', 'orange2', 'peach3', 'grape4', 'banana5'];
@State selectedValue: string = '';
build() {
Row() {
Column() {
Button('TextPickerDialog:' + this.selectedValue)
.margin(20)
.onClick(() => {
this.getUIContext().showTextPickerDialog({
range: this.fruits,
selected: this.select,
backgroundColor: 'rgb(204, 226, 251)',
backgroundBlurStyle: BlurStyle.NONE,
shadow: ShadowStyle.OUTER_FLOATING_SM,
onAccept: (value: TextPickerResult) => {
// Set select to the index of the item selected when the OK button is touched. In this way, when the text picker dialog box is displayed again, the selected item is the one last confirmed.
this.select = value.index;
console.info(this.select + '');
// After OK is clicked, the selected item is displayed on the page.
this.selectedValue = value.value as string;
console.info('TextPickerDialog:onAccept()' + JSON.stringify(value));
}
});
})
}.width('100%')
}.height('100%')
}
} 
This example demonstrates how to set whether to enable cyclic scrolling using canLoop.
// xxx.ets
@Entry
@Component
struct TextPickerDialogExample {
private select: number | number[] = 0;
private fruits: string[] = ['apple1', 'orange2', 'peach3', 'grape4', 'banana5'];
@State selectedValue: string = '';
build() {
Row() {
Column() {
Button('TextPickerDialog:' + this.selectedValue)
.margin(20)
.onClick(() => {
this.getUIContext().showTextPickerDialog({
range: this.fruits,
selected: this.select,
value: this.selectedValue,
canLoop: false,
onAccept: (value: TextPickerResult) => {
// Set select to the index of the item selected when the OK button is touched. In this way, when the text picker dialog box is displayed again, the selected item is the one last confirmed.
this.select = value.index;
console.info(this.select + '');
// After OK is clicked, the selected item is displayed on the page.
this.selectedValue = value.value as string;
console.info('TextPickerDialog:onAccept()' + JSON.stringify(value));
}
});
})
}.width('100%')
}.height('100%')
}
} 
This example shows how to set the background style of the selected item by configuring selectedBackgroundStyle.
Since API version 20, the selectedBackgroundStyle attribute is added for TextPickerDialogOptions.
// xxx.ets
@Entry
@Component
struct TextPickerExample {
private showText1: string [] = ['Text1', 'Text1', 'Text1', 'Text1']
build() {
Column() {
Row() {
Button('TextPickerDialog')
.margin(20)
.onClick(() => {
this.getUIContext().showTextPickerDialog({
range: this.showText1,
selectedBackgroundStyle: {
borderRadius: {
topLeft:15,
topRight:15,
bottomLeft:15,
bottomRight:15
},
color: 'FFC3C3C3'
}
})
})
}
}.height('100%')
}
} This example demonstrates how to customize the background blur effect by configuring backgroundBlurStyleOptions. This functionality is supported since API version 19.
@Entry
@Component
struct TextPickerExample {
private showText1: string [] = ['Text1', 'Text1', 'Text1', 'Text1']
build() {
Stack({ alignContent: Alignment.Top }) {
// Replace $r('app.media.bg') with the image resource file you use.
Image($r('app.media.bg'))
Column() {
Button('TextPickerDialog')
.margin(20)
.onClick(() => {
this.getUIContext().showTextPickerDialog({
range: this.showText1,
backgroundColor: undefined,
backgroundBlurStyle: BlurStyle.Thin,
backgroundBlurStyleOptions: {
colorMode: ThemeColorMode.LIGHT,
adaptiveColor: AdaptiveColor.AVERAGE,
scale: 1,
blurOptions: { grayscale: [20, 20] },
},
})
})
}.width('100%')
}
}
} This example demonstrates how to customize the background effect by configuring backgroundEffect. This functionality is supported since API version 19.
@Entry
@Component
struct TextPickerExample {
private showText1: string [] = ['Text1', 'Text1', 'Text1', 'Text1']
build() {
Stack({ alignContent: Alignment.Top }) {
// Replace $r('app.media.bg') with the image resource file you use.
Image($r('app.media.bg'))
Column() {
Button('TextPickerDialog')
.margin(20)
.onClick(() => {
this.getUIContext().showTextPickerDialog({
range: this.showText1,
backgroundColor: undefined,
backgroundBlurStyle: BlurStyle.Thin,
backgroundEffect: {
radius: 60,
saturation: 0,
brightness: 1,
color: Color.White,
blurOptions: { grayscale: [20, 20] }
},
})
})
}.width('100%')
}
}
}