当前位置: 首页 > wzjs >正文

手机端店铺装修seo与网站建设的关联

手机端店铺装修,seo与网站建设的关联,wordpress改动立马生效,网站建设管理调研提纲【HarmonyOS Next】鸿蒙应用弹框和提示气泡详解(一) 一、前言 应用开发中我们会很频繁的接触,弹框Dialog和提示气泡Toast的使用。 移动开发的同学会比较熟悉。不过在鸿蒙的响应式布局中,使用鸿蒙早期提供的弹框Dialog和提示气泡…

【HarmonyOS Next】鸿蒙应用弹框和提示气泡详解(一)

一、前言

应用开发中我们会很频繁的接触,弹框Dialog和提示气泡Toast的使用。

移动开发的同学会比较熟悉。不过在鸿蒙的响应式布局中,使用鸿蒙早期提供的弹框Dialog和提示气泡Toast,会很不方便。因为是和UI绑定在一起,在纯逻辑类文件中使用不了。

因为该历史问题,后续API迭代时,对鸿蒙的弹框Dialog和提示气泡Toast进行了升级。目前可以在纯逻辑类中使用,与UI进行了解耦。

迭代优化过程
从page界面UI上弹出 =》挂靠子窗口实现弹出=》UI框架层预留挂靠节点

在这里插入图片描述
根据迭代过程,我们可以发现,目前和UI强绑定的实现方式API已标注不推荐。

二、鸿蒙中的弹框使用

综上所述,目前鸿蒙HarmonyOS对于弹框和提示气泡,以及延申的组件(浮层,Popup,Menu, bindSheet, bindContentCover)

实现方案都是挂靠到UI框架的预留节点上,进行添加渲染。
1.弹框的实现
目前弹框有两种方式:
(1)系统定制弹框,可以直接使用。

系统定制弹框根据业务复杂度的不同,也有两种方式封装。
分别是基础弹框(警告弹框,列表弹窗):
在这里插入图片描述

在这里插入图片描述



struct AlertDialogTextPage {build() {Column() {Button('showAlertDialog').margin(30).onClick(() => {this.getUIContext().showAlertDialog({title: 'title',message: 'text',autoCancel: true,alignment: DialogAlignment.Center,buttons: [{value: 'cancel',action: () => {console.info('cancel')}},{enabled: true,defaultFocus: true,style: DialogButtonStyle.HIGHLIGHT,value: 'ok',action: () => {console.info('ok')}}],})})}.width('100%').margin({ top: 5 })}
}

还有带业务性质的PickerDialog弹框:
日历选择器弹窗 (CalendarPickerDialog)
日期滑动选择器弹窗 (DatePickerDialog)
时间滑动选择器弹窗 (TimePickerDialog)
文本滑动选择器弹窗 (TextPickerDialog)

// 日历选择器弹窗示例 (CalendarPickerDialog)


struct PickerDialogTextPage {private selectedDate: Date = new Date('2024-04-23')build() {Column() {Button("Show CalendarPicker Dialog").margin(20).onClick(() => {console.info("CalendarDialog.show")CalendarPickerDialog.show({selected: this.selectedDate,acceptButtonStyle: {fontColor: '#2787d9',fontSize: '16fp',backgroundColor: '#f7f7f7',borderRadius: 10},cancelButtonStyle: {fontColor: Color.Red,fontSize: '16fp',backgroundColor: '#f7f7f7',borderRadius: 10},onAccept: (date: Date)=>{// 当弹出框再次弹出时显示选中的是上一次确定的日期this.selectedDate = date}})})}.width('100%')}
}

(2)自定义弹框。

需要创建节点对象,在节点对象中添加自定义弹框的布局:

   message: string = "测试文本"/*** 自定义弹框布局* @param params*/

function buildText(params: Params) {Column() {Text(params.text).fontSize(50).fontWeight(FontWeight.Bold).margin({ bottom: 36 })Button('Close').onClick(() => {PromptActionClass.closeDialog()})}.backgroundColor('#FFF0F0F0')
}private contentNode: ComponentContent<Object> =new ComponentContent(this.ctx, wrapBuilder(buildText), new Params(this.message));

之后获取PromptAction对象,调用openCustomDialog弹出自定义弹框:

this.getContext().getPromptAction().openCustomDialog(PromptActionClass.contentNode).then(() => {console.info('OpenCustomDialog complete.')}).catch((error: BusinessError) => {let message = (error as BusinessError).message;let code = (error as BusinessError).code;console.error(`OpenCustomDialog args error code is ${code}, message is ${message}`);})

当你需要修改自定义弹框的对齐方式,偏移量等,需要添加promptAction.BaseDialogOptions。

this.getContext().getPromptAction().openCustomDialog(PromptActionClass.contentNode,{ alignment: DialogAlignment.Top, offset: { dx: 0, dy: 50 } }).then(() => {console.info('OpenCustomDialog complete.')})

2.气泡的实现
Toast的使用很简单,目前只能支持自定义文本内容,气泡层级(默认在页面内,Top在页面上)

对齐方式和悬浮态。不能设置字体的大小和颜色。如果要自定义字体大小和颜色。需要使用自定义弹框或者Popup来实现。

import { promptAction } from '@kit.ArkUI'
import { BusinessError } from '@kit.BasicServicesKit'/*** 气泡示例*/


struct ToastTextPage {build() {Column() {Button('Show toast').fontSize(20).onClick(() => {try {this.getUIContext().getPromptAction().showToast({message: '测试气泡',duration: 2000,showMode: promptAction.ToastShowMode.TOP_MOST});} catch (error) {let message = (error as BusinessError).messagelet code = (error as BusinessError).codeconsole.error(`showToast args error code is ${code}, message is ${message}`);};})}.height('100%').width('100%').justifyContent(FlexAlign.Center)}
}

三、源码示例

// PromptActionClass.ets
import { BusinessError } from '@kit.BasicServicesKit';
import { ComponentContent, promptAction } from '@kit.ArkUI';
import { PromptAction, UIContext } from '@ohos.arkui.UIContext';/*** 自定义弹框封装*/
export class PromptActionClass {static ctx: UIContext;static contentNode: ComponentContent<Object>;static options: promptAction.BaseDialogOptions;static setContext(context: UIContext) {PromptActionClass.ctx = context;}static setContentNode(node: ComponentContent<Object>) {PromptActionClass.contentNode = node;}static setOptions(options: promptAction.BaseDialogOptions) {PromptActionClass.options = options;}static openDialog() {if (PromptActionClass.contentNode !== null) {PromptActionClass.ctx.getPromptAction().openCustomDialog(PromptActionClass.contentNode, PromptActionClass.options).then(() => {console.info('OpenCustomDialog complete.')}).catch((error: BusinessError) => {let message = (error as BusinessError).message;let code = (error as BusinessError).code;console.error(`OpenCustomDialog args error code is ${code}, message is ${message}`);})}}static closeDialog() {if (PromptActionClass.contentNode !== null) {PromptActionClass.ctx.getPromptAction().closeCustomDialog(PromptActionClass.contentNode).then(() => {console.info('CloseCustomDialog complete.')}).catch((error: BusinessError) => {let message = (error as BusinessError).message;let code = (error as BusinessError).code;console.error(`CloseCustomDialog args error code is ${code}, message is ${message}`);})}}static updateDialog(options: promptAction.BaseDialogOptions) {if (PromptActionClass.contentNode !== null) {PromptActionClass.ctx.getPromptAction().updateCustomDialog(PromptActionClass.contentNode, options).then(() => {console.info('UpdateCustomDialog complete.')}).catch((error: BusinessError) => {let message = (error as BusinessError).message;let code = (error as BusinessError).code;console.error(`UpdateCustomDialog args error code is ${code}, message is ${message}`);})}}
}class Params {text: string = ""constructor(text: string) {this.text = text;}
}/*** 自定义弹框布局* @param params*/

function buildText(params: Params) {Column() {Text(params.text).fontSize(50).fontWeight(FontWeight.Bold).margin({ bottom: 36 })Button('Close').onClick(() => {PromptActionClass.closeDialog()})}.backgroundColor('#FFF0F0F0')
}/*** 首页*/


struct Index { message: string = "hello"private ctx: UIContext = this.getUIContext();private contentNode: ComponentContent<Object> =new ComponentContent(this.ctx, wrapBuilder(buildText), new Params(this.message)); handlePopup: boolean = falseaboutToAppear(): void {PromptActionClass.setContext(this.ctx);PromptActionClass.setContentNode(this.contentNode);PromptActionClass.setOptions({ alignment: DialogAlignment.Top, offset: { dx: 0, dy: 50 } });}build() {Row() {Column() {/*** 显示自定义气泡 更新样式*/Button("open dialog and update options").margin({ top: 50 }).onClick(() => {PromptActionClass.openDialog()setTimeout(() => {PromptActionClass.updateDialog({alignment: DialogAlignment.Bottom,offset: { dx: 0, dy: -50 }})}, 1500)})/*** 显示自定义气泡 更新内容数据*/Button("open dialog and update content").margin({ top: 50 }).onClick(() => {PromptActionClass.openDialog()setTimeout(() => {this.contentNode.update(new Params('update'))}, 1500)})/*** 气泡菜单*/Button('PopupOptions').onClick(() => {this.handlePopup = !this.handlePopup}).bindPopup(this.handlePopup, {message: 'This is a popup with PopupOptions',})/*** 提示气泡*/Button('show Toast').onClick(() => {let promptAction: PromptAction = this.ctx.getPromptAction();try {promptAction.showToast({message: 'Message Info',duration: 2000});} catch (error) {let message = (error as BusinessError).message;let code = (error as BusinessError).code;console.error(`showToast args error code is ${code}, message is ${message}`);};})/*** 系统弹框*/Button('show Toast').onClick(() => {let promptAction: PromptAction = this.ctx.getPromptAction();try {promptAction.showToast({message: 'Message Info',duration: 2000});} catch (error) {let message = (error as BusinessError).message;let code = (error as BusinessError).code;console.error(`showToast args error code is ${code}, message is ${message}`);};})}.width('100%').height('100%')}.width('100%').height('100%')}
}

文章转载自:

http://EFfvRp1j.hysqx.cn
http://VQ8bc1Ga.hysqx.cn
http://alvHtEeu.hysqx.cn
http://2L7KqRlN.hysqx.cn
http://BC6EIaXQ.hysqx.cn
http://DdwWnNHJ.hysqx.cn
http://GNBr34db.hysqx.cn
http://YBKGZpOx.hysqx.cn
http://DnOiB8jJ.hysqx.cn
http://HMPkGD3a.hysqx.cn
http://B4YqB24a.hysqx.cn
http://8VcGdFY9.hysqx.cn
http://Nb44RHrO.hysqx.cn
http://OiGeaBm6.hysqx.cn
http://qC0qYF61.hysqx.cn
http://g3jmXzoL.hysqx.cn
http://jIZ39lRI.hysqx.cn
http://UBqYgnl1.hysqx.cn
http://RlDy3J55.hysqx.cn
http://8KiKxhp6.hysqx.cn
http://kq5l5KUK.hysqx.cn
http://rBcgeeWt.hysqx.cn
http://9bhSfV4x.hysqx.cn
http://pjnrX5EF.hysqx.cn
http://iBFL6jbV.hysqx.cn
http://xNpE7eXE.hysqx.cn
http://1keseIHF.hysqx.cn
http://MTBpUcgD.hysqx.cn
http://uyOzyQ1p.hysqx.cn
http://x5HWFOgY.hysqx.cn
http://www.dtcms.com/wzjs/671015.html

相关文章:

  • 品牌网站建设只詢大蝌蚪php中英双语农业公司网站源码
  • 招商加盟网站大全有一个做场景动画的网站
  • 织梦教育网站模板网站到期如何续费
  • 怎么样建网站chatgpt openai
  • 如何做登陆界面的网站网站快速备案安全
  • 湖南平台网站建设制作智慧团建登录手机版正式版
  • 做外卖网站的模板大学网站建设管理制度
  • 金华建设局网站做网站 前端
  • 营销网站的设计思路专业网站建设价格分析
  • 文化旅游做的好的网站简单的网页制作素材
  • 网站一般怎么维护代理登录网站
  • php个人网站简洁旅行社网页设计
  • 网站建设架构选型宁波seo排名优化价格
  • 九度互联网站制作效果凡科网站是骗子
  • 网站里的内容都是什么作用鞍山做网站排名
  • 做暧动漫视频在线观看网站知识营销成功案例介绍
  • go语做网站有没有可以免费看的视频
  • 电子公司网站设计上海seo怎么优化
  • 第二课强登陆网站新型智库建设的意见手机上写WordPress博文
  • 网站开发 网页设计战鼓网这种网站怎么做
  • 网站建设发布设需求网页制作类软件有哪些
  • 南宁制作企业网站购物网站案例
  • 上海网站建设在哪辽宁网站建设
  • 如何查看网站收录情况ui网页界面设计素材
  • 中建二局核电建设分公司网站宁波网站推广怎样做
  • 网站建设最好wordpress 后台慢
  • 平面设计素材网站大全网站定制开发怎么写
  • 哈尔滨做设计和网站的公司吗广告公司好听的名字
  • 网站图标在哪里修改如何用子域名做网站
  • 工作室推广网站app后端用什么开发