当前位置: 首页 > 科技观察

HarmonyOS实战——CommonDialog组件的基本使用

时间:2023-03-12 10:51:18 科技观察

更多内容请访问:HarmonyOS.51cto.com,与华为官方共建的鸿蒙技术社区2.使用CommonDialog自定义布局3.优化代码——提取弹窗工具类弹窗组件在HarmonyOS中,常用的弹窗有两种:1、第一种是普通弹窗(CommonDialog),提示用户并允许用户进行相应的操作,比如在使用打车软件时,如果手机没有没有开启定位,会有弹框提示你开启手机定位。这是一个普通的弹出框,作为信息提示,做一些操作。2、第二种消息提示弹框(ToastDialog),例如:每次打开“小破站”APP都会弹出提示,这些也是弹框。这些弹出框不需要用户选择,它们只是告诉用户一些信息。1、CommonDialog在鸿蒙中编写使用。这个普通和弹出框其实是有默认布局的。以下选择按钮最多只有三个弹出框,不是APP。它在启动时立即弹出。一般有两种情况:1.按钮被点击时弹出。2.当程序满足一定条件时,也会弹出。项目示例:新建项目:DialogApplicationability_mainMainAbilitySlicepackagecom.xdr630.dialogapplication.slice;importcom.xdr630.dialogapplication.ResourceTable;importohos.aafwk.ability.AbilitySlice;importohos.aafwk.content.Intent;importohos.agp.components。按钮;importohos.agp.components.Component;importohos.agp.window.dialog.CommonDialog;importohos.agp.window.dialog.IDialog;publicclassMainAbilitySliceextendsAbilitySliceimplementsComponent.ClickedListener{@OverridepublicvoidonStart(Intentintent){super.onStart(intent);super.setUIContent(;abil_table.Layout)1.找到按钮Buttonbut1=(Button)findComponentById(ResourceTable.Id_but1);//2。给按钮添加点击事件but1.setClickedListener(this);}@OverridepublicvoidonActive(){super.onActive();}@OverridepublicvoidonForeground(Intentintent){super.onForeground(intent);}@OverridepublicvoidonClick(Componentcomponent){//它弹出普通弹框就够了//1。创建弹框对象//this:当前界面显示当前弹框CommonDialogcd=newCommonDialog(this);//2.因为弹出框中有默认布局//设置标题cd.setTitleText("系统定位服务已关闭");//设置内容cd.setContentText("请开启定位服务,以便司机可以在车上准确接你");//设置按钮//参数1:按钮索引012//参数2:按钮上的文字//参数3:点击按钮后做什么cd.setButton(0,"Setting",newIDialog.ClickedListener(){@OverridepublicvoidonClick(IDialogiDialog,inti){//写点击后的设置,要做的事情//如果点击后不需要做任何事情,在第三个参数number里面传null就可以了//因为点击这里设置后不能跳转到你设置位置的界面,所以先不写了,等你学会了再在这里填}});//设置取消按钮cd.setButton(1,"Cancel",null);//显示弹出框cd.show();}}操作:点击后:再次点击灰色区域时,有在点击或取消按钮时是没有反应的,因为上面没有反应弹出框点击null一般有两种情况:点击灰色区域不能取消弹出框,必须点击取消按钮取消弹出框点击灰色区域或者取消按钮可以达到取消弹出框的效果情况:1.点击灰色区域也可以取消按钮。在上面代码2的基础上添加如下内容。当鼠标点击取消按钮时,弹出框也可以消失。将上面取消按钮的null设置为:运行,点击后:以上两种情况实现2.CommonDialog自定义布局使用CommonDialog中的默认布局。布局由以下三部分组成:所以直接调用方法在里面设置一些文本内容就可以了。下面介绍一下自己定义弹框内容的例子如下:主界面有一个按钮,点击按钮后会出现一个弹框。弹框里有三样东西:一行文字和两个按钮。单击“确定”按钮后,将显示上述文本。会变成“点击确定按钮”,点击取消按钮时,弹框消失如下:新建项目:DialogLayoutApplication弹框里面的内容也可以是用xml写的,新建一个布局文件,文件名不能大写,上面的弹框由:一个Text文本+两个Button生成弹框的布局文件后,首先改变弹框的大小布局文件,默认是填满整个屏幕,改成包裹内容即可。因为文字内容是变化的,所以在java代码中设置了两个按钮。如果不设置margin,它们会被挤在一起,所以需要添加messagedialogMainAbilitySlicepackagecom.xdr630.dialoglayoutapplication.slice;importcom.xdr630.dialoglayoutapplication.ResourceTable;importohos.aafwk.ability.AbilitySlice;importohos.aafwk.content.Intent;importohos.agp.components.*;importohos.agp.window.dialog.CommonDialog;publicclassMainAbilitySliceextendsAbilitySliceimplementsComponent.ClickedListener{@OverridepublicvoidonStart(Intentintent){super.onStart(intent);super.setUIContent(ResourceTable.Layout_ability_main);//1.找到布局中的按钮Buttonbut=(Button)findComponentById(ResourceTable.Id_but);//2.添加一个点击事件but.setClickedListener(this);}@OverridepublicvoidonActive(){super.onActive();}@OverridepublicvoidonForeground(Intentintent){super.onForeground(intent);}@OverridepublicvoidonClick(Componentcomponent){//显示弹框//创建弹框对象CommonDialogcd=newCommonDialog(this);//大小为默认包内容//弹框默认居中//弹框默认透明//弹框默认直角,可以设置直角为圆角cd.setCornerRadius(15);//加载消息对话框xml文件放到内存中,交给弹框显示//加载xml文件,获取layout对象//解析方法:加载xml文件,返回layout对象//参数1:待生成的xml文件loaded//参数2:xml文件是否与其他xml文件相关如果是独立的,就写null//参数3:如果文件是独立的,那么直接写falseDirectionalLayoutdl=(DirectionalLayout)LayoutScatter.getInstance(this).parse(ResourceTable.Layout_messagedialog,null,false);//来设置eventsormodifiedthecontentforthetextandbuttonsinthelayout//这时候需要用dl来调用,也就是说获取dl的布局中的组件Texttitle=(Text)dl.findComponentById(ResourceTable.id_message);Buttonsubmit=(Button)dl.findComponentById(ResourceTable.Id_submit);Buttoncancel=(Button)dl.findComponentById(ResourceTable.Id_cancel);//为标题设置内容title.setText("请选择下方按钮并click");//还需要给两个按钮添加点击事件//取消按钮也添加点击事件cancel.setClickedListener(newComponent.ClickedListener(){@OverridepublicvoidonClick(Componentcomponent){//点击取消按钮时,关闭弹框cd.destroy();}});//此时布局对象和弹框还没有任何关系//布局对象需要交给弹出框cd.setContentCustomComponent(dl);//让弹出框显示cd.show();}}操作:点击后弹出-弹出框会弹出在弹出框中点击确认按钮后,文字内容发生变化。点击取消按钮后,弹框消失,返回原界面。3.优化代码-提取弹框在工具类工作过程中,如果需要用到多个弹出框,如果每次都像上面这样写,会造成代码冗余,不方便管理。接下来,将弹出框提取到一个工具类中。使用弹出框Frame时,直接调用工具类中的方法即可。创建工具类创建弹出工具类:MyDialog当外界调用该方法时,会出现一个弹出框。把上面OnClick方法中的代码剪掉。剪切到上面的showDialog方法粘贴后,修改MyDialog类中的部分代码如下。修改MainAbilitySlice类如下,直接调用MyDialog中的方法,传参运行:点击确定按钮后,发现Text的文本内容在刚才的方法中如果想了解更多,请访问:Harmonyos技术社区https://harmonyos.51cto.com与华为官方共建