赞
踩
弹窗是移动应用中常见的一种用户界面元素,常用于显示一些重要的信息、提示用户进行操作或收集用户输入。ArkTS提供了多种内置的弹窗供开发者使用,如消息提示、警告对话框、选择器弹窗、操作列表弹窗,除此之外还支持自定义弹窗,来满足各种不同的需求。
Toast(消息提示)组件,常用于显示一些简短的消息或提示,一般会在短暂停留后自动消失。
使用需要通过 @ohos.promptAction
模块中的showToast(),
方法显示 Toast 提示,使用时需要先导入@ohos.promptAction
模块。
showToast(options: { message: string | Resource,duration?: number,bottom?: string | number})
message
属性用于设置提示信息duration
属性用于设置提示信息停留时长,单位为毫秒,取值范围是[1500,10000]bottom
属性用于设置提示信息到底部的距离- import promptAction from '@ohos.promptAction'
-
- @Entry
- @Component
- struct textInput {
- @State message: string = '';
-
- build() {
- Column({ space: 10 }) {
- TextInput({ 'placeholder': '请输入账号', 'text': '' })
- .onChange((newText) => {
- this.message = newText
- })
- .placeholderFont({ weight: '800' })
- .width(200)
- .height(50)
- .backgroundColor(Color.Gray)
- Button('提交')
- .fontSize(25)
- .onClick(() => {
- console.log(this.message.length + '')
- if (this.message.length<5) {
- promptAction.showToast({
- message:'您的账号有误',
- duration:1600,
- bottom:150
- })
- }
- })
- }
- .width('100%')
- .height("100%")
- .justifyContent(FlexAlign.Center)
- }
- }
AlertDialog(警告对话框)用于向用户发出警告或确认操作的提示,确保用户在敏感操作前进行确认。AlertDialog.show()调用。
-
- @Entry
- @Component
- struct textInput {
- build() {
- Column({ space: 10 }) {
- Row({ space: 10 }) {
- Text("一本正经").fontSize(30)
- Text("32套").fontSize(30)
- Button('删除')
- .fontSize(25)
- .onClick(() => {
- AlertDialog.show({
- title: "删除订单记录", //弹窗标题
- message: '确认删除吗?', // 提示消息
- autoCancel:false,// 点击遮罩层即阴影,是否关闭弹窗。true是点击遮罩层弹窗关闭。
- alignment: DialogAlignment.Bottom, //弹窗位置
- offset: { dx: 0, dy: -30 }, // 相对弹窗位置即DialogAlignment.Bottom 在x轴和y轴偏移
- primaryButton: {
- value: "确定",
- fontColor:Color.Red,
- action: () => {
- }
- },
- secondaryButton: {
- value: "取消",
- action: () => {
- }
- },
- cancel:() => {// 点击遮罩层后,遮罩层消失弹窗自动关闭时候触发,此时必须autoCancel:true,为false则失效
- console.log('点击遮罩层后,遮罩层消失弹窗自动关闭时候触发');
- }
-
- })
- })
- }
-
- }
- .width('100%')
- .height("100%")
- .justifyContent(FlexAlign.Center)
- }
- }
ActionSheet(操作列表弹窗)用于提供一组选项给用户选择,用户从中选择后,可执行相应的操作。
可使用全局方法ActionSheet.show()显示操作列表弹窗,具体用法可参考相关案例或者官方文档。
- @Entry
- @Component
- struct textInput {
- build() {
- Column({ space: 10 }) {
- Row({ space: 10 }) {
- Text("一本正经").fontSize(30)
- Text("32套").fontSize(30)
- Button('删除')
- .fontSize(25)
- .onClick(() => {
- ActionSheet.show({
- title: "文件操作", //弹窗标题
- message: '请选择你要执行的文件', // 提示消息
- autoCancel: false, // 点击遮罩层即阴影,是否关闭弹窗。true是点击遮罩层弹窗关闭。
- alignment: DialogAlignment.Bottom, //弹窗位置
- offset: { dx: 0, dy: -30 }, // 相对弹窗位置即DialogAlignment.Bottom 在x轴和y轴偏移
- confirm: {
- value: '取消',
- action: () => {
- console.log('Get Alert Dialog handled')
- }
- },
- cancel: () => { // 点击遮罩层后,遮罩层消失弹窗自动关闭时候触发,此时必须autoCancel:true,为false则失效
- console.log('点击遮罩层后,遮罩层消失弹窗自动关闭时候触发');
- },
- sheets: [
- {
- icon:$r('app.media.icon_copy'),
- title:'复制文件',
- action: () => {
- console.error('复制文件')
- }
- },
- {
- icon:$r('app.media.icon_cut'),
- title: '剪切文件',
- action: () => {
- console.error('剪切文件')
- }
- },
- {
- icon:$r('app.media.icon_delete'),
- title: '删除文件',
- action: () => {
- console.error('删除文件')
- }
- }
- ],
- })
- })
- }
-
- }
- .width('100%')
- .height("100%")
- .justifyContent(FlexAlign.Center)
- }
- }
选择器弹窗用于让用户从一个列表中选择一个具体的值。ArkTS内置了多种选择器弹窗,例如文本选择器、日期选择器、时间选择器等等。
TextPickerDialog(文本滑动选择器弹窗)
DatePickerDialog(日期滑动选择期弹窗)
TimePickerDialog(时间滑动选择器弹窗)
- @Entry
- @Component
- struct textInput {
- @State select: number = 0
- @State word: string = ''
- private fruits: string[] = ['苹果', '橘子', '香蕉', '荔枝']
-
- build() {
- Column({ space: 10 }) {
- Row({ space: 10 }) {
- Text("一本正经").fontSize(25)
- Text("32套").fontSize(25)
- Text(this.word).fontSize(25)
- }
-
- Button('选择')
- .fontSize(25)
- .onClick(() => {
- TextPickerDialog.show({
- range: this.fruits, // 指定下拉表内容
- selected: this.select, // 指定默认值
- onAccept: (value: TextPickerResult) => {
- console.info("TextPickerDialog:onAccept()" + JSON.stringify(value))
- this.select = value.index
- this.word = value.value
- },
- onCancel: () => {// 只要改变值就会触发,确认也会触发
- console.info("TextPickerDialog:onCancel()")
- },
- onChange: (value: TextPickerResult) => {
- console.info("TextPickerDialog:onChange()" + JSON.stringify(value))
- }
- })
- })
-
- }
- .width('100%')
- .height("100%")
- .justifyContent(FlexAlign.Center)
- }
- }
选择器弹窗用于让用户从一个列表中选择一个具体的值。ArkTS内置了多种选择器弹窗,例如文本选择器、日期选择器、时间选择器等等
- @Entry
- @Component
- struct textInput {
- @State select: number = 0
- @State word: string = ''
- private fruits: string[] = ['苹果', '橘子', '香蕉', '荔枝']
- @State date: string = ''
-
- build() {
- Column({ space: 10 }) {
- Text("日期:"+this.date).fontSize(25)
- Row({ space: 10 }) {
- Text("一本正经").fontSize(25)
- Text("32套").fontSize(25)
- Text(this.word).fontSize(25)
- }
-
- Row({ space: 10 }) {
- Button('选择')
- .fontSize(25)
- .onClick(() => {
- TextPickerDialog.show({
- range: this.fruits, // 指定下拉表内容
- selected: this.select, // 指定默认值
- onAccept: (value: TextPickerResult) => {
- console.info("TextPickerDialog:onAccept()" + JSON.stringify(value))
- this.select = value.index
- this.word = value.value
- },
- onCancel: () => { // 只要改变值就会触发,确认也会触发
- console.info("TextPickerDialog:onCancel()")
- },
- onChange: (value: TextPickerResult) => {
- console.info("TextPickerDialog:onChange()" + JSON.stringify(value))
- }
- })
- })
- Button('日期').fontSize(25)
- .onClick(() => {
- DatePickerDialog.show({
- onAccept: (value: DatePickerResult) => {
- this.date = value.year + '年' + (value.month+1) + '月' + value.day + '日'
- console.info("DatePickerResult:onAccept()" + JSON.stringify(value) + ' ' + this.date)
- },
- onCancel: () => { // 只要改变值就会触发,确认也会触发
- console.info("DatePickerResult:onCancel()")
- },
- onChange: (value: DatePickerResult) => {
- console.info("DatePickerResult:onChange()" + JSON.stringify(value))
- }
- })
- })
- }
-
- }
- .width('100%')
- .height("100%")
- .justifyContent(FlexAlign.Center)
- }
- }
当现有组件不满足要求时,可考虑自定义弹窗,自定义弹窗允许开发者自定义弹窗内容和样式。
自定义弹窗实现四步骤:
- @Entry
- @Component
- struct CustomDialogPage {
- @State answer: string = '?'
- controller: CustomDialogController = new CustomDialogController({
- builder: TextInputDialog({
- confirm: (value) => {
- this.answer = value;
- }
- }),
- alignment: DialogAlignment.Bottom,
- offset: { dx: 0, dy: -30 }
- })
-
- build() {
- Column({ space: 50 }) {
- Row() {
- Text('1+1=')
- .fontWeight(FontWeight.Bold)
- .fontSize(30)
- Text(this.answer)
- .fontWeight(FontWeight.Bold)
- .fontSize(30)
- }
-
- Button('作答')
- .onClick(() => {
- this.controller.open();
- })
- }.width('100%')
- .height('100%')
- .justifyContent(FlexAlign.Center)
- }
- }
-
-
- @CustomDialog
- struct TextInputDialog {
- controller: CustomDialogController = new CustomDialogController({ builder: TextInputDialog() })
- confirm: (value: string) => void;
- value: string = '';
-
- build() {
- Column({ space: 20 }) {
- Text('请输入你的答案')
- TextInput({ placeholder: '请输入数字' })
- .type(InputType.Number)
- .onChange((value) => {
- this.value = value;
- })
- Row({ space: 50 }) {
- Button('取消')
- .onClick(() => {
- this.controller.close();
- })
- Button('确认').onClick(() => {
- this.confirm(this.value);
- this.controller.close();
- })
- }
- }.padding(20)
- }
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。