学习笔记(三十):ArkUi-UIContext.getPromptAction(弹窗)

news/2024/11/14 11:02:54/文章来源:https://www.cnblogs.com/xqxacm/p/18534726

概述:

基于promptAction弹窗演进而来,支持全局自定义弹窗,不依赖UI组件,依赖UIContext,

支持在非页面文件中使用,弹窗内容支持动态修改,支持自定义弹窗圆角半径、大小和位置,

适合在与页面解耦的全局弹窗、自定义弹窗显示和退出动画等场景下使用。

注意:

需先使用UIContext中的getPromptAction()方法获取到PromptAction对象,再通过该对象调用对应方法

一、导入模块

import { PromptAction } from '@kit.ArkUI';

注意这里导入的是PromptAction ,而promptAction导入的是promptAction

promptAction 的导入:
import { promptAction } from '@kit.ArkUI';

 

二、定义一个PromptAction

let promptAction:PromptAction = this.uiContext.getPromptAction();

uiContext的定义

import { PromptAction, UIContext } from '@kit.ArkUI';uiContext : UIContext = this.getUIContext()

 

 

三、showToast

showToast(options: promptAction.ShowToastOptions): void

 

创建并显示文本提示框

1、简单使用:

// UIContext.getPromptAction使用示例
import { PromptAction, UIContext } from '@kit.ArkUI';@Entry
@Component
struct UiPromptActionExample {@State message: string = 'Hello World';uiContext : UIContext = this.getUIContext() // 显示toast
  showToast(){// 获取PromptActionlet promptAction:PromptAction = this.uiContext.getPromptAction();promptAction.showToast({message: '提示内容'})}build() {Row() {Column() {Button('toast').fontSize(20).fontWeight(FontWeight.Bold).onClick(() => {this.showToast()})}.width('100%')}.height('100%')}
}

 

2、ShowToastOptions,文本提示框的选项

1、message,必填

string | Resource类型,显示的文本信息

说明:默认字体为'Harmony Sans',不支持设置其他字体。

2、duration,非必填

number类型,显示时长(毫秒)

说明:默认值1500ms,取值区间:1500ms-10000ms。若小于1500ms则取默认值,若大于10000ms则取上限值10000ms。

3、bottom,非必填

string | number类型,设置弹窗底部边框距离导航条的高度

说明:默认值:80vp;ToastShowMode.TOP_MOST模式下,软键盘拉起时,如果bottom值过小,toast要被软键盘遮挡时,会自动避让至距离软键盘80vp处。ToastShowMode.DEFAULT模式下,软键盘拉起时,会上移软键盘的高度。

4、showMode,非必填

ToastShowMode类型,设置弹窗是否显示在应用之上。

说明:默认值:ToastShowMode.DEFAULT,默认显示在应用内。

5、alignment,非必填

Aligment类型,对齐方式。

说明:默认值:undefined,默认底部偏上位置。

6、offset,非必填

Offset类型,在对齐方式上的偏移。

说明:默认值:{dx:0, dy:0},默认没有偏移。

7、backgroundColor ,非必填

ResourceColor类型,文本提示框背板颜色

说明:默认值:Color.Transparent;当设置了backgroundColor为非透明色时,backgroundBlurStyle需要设置为BlurStyle.NONE,否则颜色显示将不符合预期效果。

8、textColor ,非必填

ResourcseColor类型,文本提示框文本颜色

说明:默认值:Color.Black

9、backgroundBlurStyle,非必填

BlurStyle类型,文本提示框背板模糊材质

说明:

默认值:BlurStyle.COMPONENT_ULTRA_THICK

设置为BlurStyle.NONE即可关闭背景虚化。当设置了backgroundBlurStyle为非NONE值时,则不要设置backgroundColor,否则颜色显示将不符合预期效果。

10、shadow,非必填

ShadowOptions | ShadowStyle 类型,文本提示框背板阴影

说明:默认值:ShadowStyle.OuterDefaultMD

 

三、showDialog
不常用,参考文档
 
四、showActionMenu
不常用,参考文档
 
五、openCustomDialog

创建并弹出dialogContent对应的自定义弹窗,使用Promise异步回调。

通过该接口弹出的弹窗内容样式完全按照dialogContent中设置的样式显示,即相当于customdialog设置customStyle为true时的显示效果。

暂不支持isModal = true与showInSubWindow = true同时使用。

openCustomDialog<T extends Object>(dialogContent: ComponentContent<T>, options?: promptAction.BaseDialogOptions): Promise<void>

 

使用示例:

// UIContext.getPromptAction使用示例
import { ComponentContent, PromptAction, UIContext } from '@kit.ArkUI';@Entry
@Component
struct UiPromptActionExample {@State message: string = 'Hello World';uiContext : UIContext = this.getUIContext()// 显示dialog
  showDialog(){// 获取PromptActionlet promptAction:PromptAction = this.uiContext.getPromptAction();let contentNode = new ComponentContent(this.uiContext,wrapBuilder(buildText), new Params(this.message));// 打开弹框
    promptAction.openCustomDialog(contentNode)}build() {Row() {Column() {Button('openDialog').fontSize(20).fontWeight(FontWeight.Bold).onClick(() => {this.showDialog()})}.width('100%')}.height('100%')}
}
@Builder
function buildText(params: Params) {Column() {Text(params.text).fontSize(50).fontWeight(FontWeight.Bold).margin({bottom: 36})}.backgroundColor('#FFF0F0F0')
}
class Params {text: string = ""constructor(text: string) {this.text = text;}
}

 

 

六、closeCustomDialog

关闭已弹出的dialogContent对应的自定义弹窗,使用Promise异步回调。

closeCustomDialog<T extends Object>(dialogContent: ComponentContent<T>): Promise<void>

 

使用示例:

// UIContext.getPromptAction使用示例
import { ComponentContent, PromptAction, UIContext } from '@kit.ArkUI';@Entry
@Component
struct UiPromptActionExample {@State message: string = 'Hello World';uiContext : UIContext = this.getUIContext()// 显示dialog
  showDialog(){// 获取PromptActionlet promptAction:PromptAction = this.uiContext.getPromptAction();let contentNode = new ComponentContent(this.uiContext,wrapBuilder(buildText), new Params(this.message));// 打开弹框
    promptAction.openCustomDialog(contentNode)setTimeout(() => {promptAction.closeCustomDialog(contentNode);}, 2000);     //2秒后自动关闭
  }build() {Row() {Column() {Button('openDialog').fontSize(20).fontWeight(FontWeight.Bold).onClick(() => {this.showDialog()})}.width('100%')}.height('100%')}
}
@Builder
function buildText(params: Params) {Column() {Text(params.text).fontSize(50).fontWeight(FontWeight.Bold).margin({bottom: 36})}.backgroundColor('#FFF0F0F0')
}
class Params {text: string = ""constructor(text: string) {this.text = text;}
}

 

七、updateCustomDialog

updateCustomDialog<T extends Object>(dialogContent: ComponentContent<T>, options: promptAction.BaseDialogOptions): Promise<void>

更新已弹出的dialogContent对应的自定义弹窗的样式

弹窗样式,目前仅支持更新alignment、offset、autoCancel、maskColor

使用示例:

两秒够更新alignment 使弹框居中显示

// UIContext.getPromptAction使用示例
import { ComponentContent, PromptAction, UIContext } from '@kit.ArkUI';@Entry
@Component
struct UiPromptActionExample {@State message: string = 'Hello World';uiContext: UIContext = this.getUIContext()// 显示dialog
  showDialog() {// 获取PromptActionlet promptAction: PromptAction = this.uiContext.getPromptAction();let contentNode = new ComponentContent(this.uiContext,wrapBuilder(buildText), new Params(this.message));// 打开弹框
    promptAction.openCustomDialog(contentNode)setTimeout(() => {promptAction.updateCustomDialog(contentNode,{alignment:DialogAlignment.Center});}, 2000); //2秒后自动关闭
  }build() {Row() {Column() {Button('openDialog').fontSize(20).fontWeight(FontWeight.Bold).onClick(() => {this.showDialog()})}.width('100%')}.height('100%')}
}@Builder
function buildText(params: Params) {Column() {Text(params.text).fontSize(50).fontWeight(FontWeight.Bold).margin({ bottom: 36 })}.backgroundColor('#FFF0F0F0')
}class Params {text: string = ""constructor(text: string) {this.text = text;}
}

 

八、更新弹框内容

setTimeout(() => {contentNode.update(new Params("修改内容"))
}, 2000); //2秒后更新组件内容

 

相关文档:ComponentContent

 

九、openCustomDialog,closeCustomDialog另一种使用方式

创建并弹出自定义弹窗。使用Promise异步回调,返回供closeCustomDialog使用的对话框id。暂不支持isModal = true与showInSubWindow = true同时使用。

openCustomDialog(options: promptAction.CustomDialogOptions): Promise<number>

 

关闭自定义弹窗

closeCustomDialog(dialogId: number): void

 

使用示例:

import { PromptAction } from '@kit.ArkUI';@Entry
@Component
struct Index {promptAction: PromptAction = this.getUIContext().getPromptAction()private customDialogComponentId: number = 0@BuildercustomDialogComponent() {Column() {Text('弹窗').fontSize(30)Row({ space: 50 }) {Button("确认").onClick(() => {this.promptAction.closeCustomDialog(this.customDialogComponentId)})Button("取消").onClick(() => {this.promptAction.closeCustomDialog(this.customDialogComponentId)})}}.height(200).padding(5).justifyContent(FlexAlign.SpaceBetween)}build() {Row() {Column() {Button("click me").onClick(() => {this.promptAction.openCustomDialog({builder: () => {this.customDialogComponent()},onWillDismiss: (dismissDialogAction: DismissDialogAction) => {console.info("reason" + JSON.stringify(dismissDialogAction.reason))console.log("dialog onWillDismiss")if (dismissDialogAction.reason == DismissReason.PRESS_BACK) {dismissDialogAction.dismiss()}if (dismissDialogAction.reason == DismissReason.TOUCH_OUTSIDE) {dismissDialogAction.dismiss()}}}).then((dialogId: number) => {this.customDialogComponentId = dialogId})})}.width('100%').height('100%')}.height('100%')}
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/829145.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MudBlazor:基于Material Design风格开源且强大的Blazor组件库

项目介绍 MudBlazor是一个基于Material Design风格开源、免费(MIT License)、功能强大的Blazor组件框架,注重易用性和清晰的结构。它非常适合想要快速构建Web应用程序的 .NET 开发人员,无需费力地处理 CSS 和 JavaScript。由于MudBlazor完全使用C#编写,因此你可以自由地调…

读数据工程之道:设计和构建健壮的数据系统32序列化和云网络

序列化和云网络1. 序列化 1.1. 仅仅通过从CSV转换到Parquet序列化,任务性能就提高了上百倍 1.2. 基于行的序列化1.2.1. 基于行的序列化是按行来组织数据1.2.2. 对于那些半结构化的数据(支持嵌套和模式变化的数据对象)​,基于行的序列化需要将每个对象作为一个单元来存储1.2…

入门龙芯旧世界汇编指令

我是龙芯汇编指令新手,本文是我学习龙芯汇编的笔记我借到了一台宝贵的龙芯 3A6000 设备,我期望在这台设备上面学习龙芯汇编指令。这台设备上的是龙芯旧世界的麒麟系统,由于这台设备很宝贵,我不能随意玩。为了防止弄坏设备,我将在此设备上面搭建 docker 环境,进入到 docke…

促进通用跨域检索中广义知识的模拟

促进通用跨域检索中广义知识的模拟ProS:促进通用跨域检索中广义知识的模拟通用跨域检索(UCDR)的目标是在广义测试场景中实现稳健的性能,其中数据在训练过程中可能属于严格未知的域和类别。最近,具有快速调整的预训练模型显示出很强的泛化能力,并在各种下游任务中取得了显著…

ParamISP:使用相机参数学习正向和反向ISP

ParamISP:使用相机参数学习正向和反向ISPRAW图像很少被共享,主要是因为与相机ISP获得的sRGB图像相比,RAW图像的数据量过大。最近已经证明,学习相机ISP的正向和反向过程,可以对输入的sRGB图像进行具有物理意义的RAW级图像处理。然而,现有的基于学习的ISP方法,无法处理ISP…

thinkphp console 命令行打印错误调用堆栈

在think\Console源文件里找到 run() 方法,加上内容: $output->error($e->getTraceAsString()); 然后当执行命令报错的时候就会有详细的错误信息,方便排查具体是哪行引起的问题!本文来自博客园,作者:imzhi,转载请注明原文链接:https://www.cnblogs.com/imzhi/p/18…

信道的极限容量

我们可以简单地将带通信道理解为无线传输信道,低通信道理解为有线传输信道,记忆公式时应该记住乘2的那个调制速度就是波特率

JD 商品詳情頁解析

https://item.jd.com/100036218692.html 以这个商品链接为例,分析详情图接口抓包拿到接口入参出参构建代码headers = {cookie:"",accept: application/json, text/javascript, */*; q=0.01,accept-language: zh-CN,zh;q=0.9,origin: https://item.jd.com,priority: …

Vmware虚拟机下载安装使用教程(17.5.2最新版非常详细)

VMware,自1998年成立以来,便以其革命性的虚拟化技术引领行业。这家公司专注于提供软件和服务,支持云计算和虚拟化解决方案,使得一台物理服务器能够托管多个独立的虚拟机,每个虚拟机都能独立运行不同的操作系统和应用。VMware的技术不仅优化了硬件资源的使用效率,还简化了…

Vmware虚拟机下载安装使用教程(2024最新版非常详细)

VMware,自1998年成立以来,便以其革命性的虚拟化技术引领行业。这家公司专注于提供软件和服务,支持云计算和虚拟化解决方案,使得一台物理服务器能够托管多个独立的虚拟机,每个虚拟机都能独立运行不同的操作系统和应用。VMware的技术不仅优化了硬件资源的使用效率,还简化了…

RHEL9.4上创建RHEL8.1虚拟机

日期:2024.11.5 目的:在物理机RHEL9.4搭建的虚拟化环境中安装虚拟机,操作系统为RHEL8.1,虚拟出网卡3块,用来模拟路由,后续还打算在上面搭建一个DHCP的中继服务。 参照:鸟哥Linux私房菜服务器篇 第二章、第一個虛擬機器的安裝與調整 https://linux.vbird.org/linux_server/…