每次使用时,都写一遍弹框操作的代码不是不行,而是太麻烦了,现在就把弹框操作抽象出来作为一个工具类,需要使用的使用直接调用方法即可。
- 注:一般在Java开发当中,工具类都放在 xxx_utils包下,此处我们创建 dialogutils 包,用于存储弹框相关的工具类
- 这里需要注意的就是上下文,也即规定弹框展示哪个界面中
抽取工具类:
package com.example.demo1.dialogutils;
import com.example.demo1.ResourceTable;
import ohos.agp.components.*;
import ohos.agp.window.dialog.CommonDialog;
import ohos.app.Context;
public class MyDialog {
/**
* return none
* @param context:上下文参数
* @param msg:文本框展示的默认文本数据
*/
public static void showDialog(Context context, String msg) {
//把普通弹框弹出来
//1、创建弹框对象
//this:当前弹框是哪些展示在当前的界面中
CommonDialog cd = new CommonDialog(context);
//默认弹框是直角的,可以把执教设置为圆角
cd.setCornerRadius(15);
//LayoutScatter布局加载器,加载xml文件并获得一个布局对象
//parse方法:加载xml文件,返回一个布局对象
//参数1:要加载的xml文件
//参数2:该xml文件是否跟其他xml文件有关,如果无关是独立的,就写null就可以了
//参数3:如果文件是独立的,就直接写false
DirectionalLayout dl = (DirectionalLayout) LayoutScatter.getInstance(context).parse(ResourceTable.Layout_messagedialog, null, false);
//要给布局里面的文本和按钮设置事件或者修改内容
//此时需要用dl去调用,表示获取的是dl这个布局的内容
Text title = (Text) dl.findComponentById(ResourceTable.Id_text_d);
Button submit = (Button) dl.findComponentById(ResourceTable.Id_submit);
Button cancel = (Button) dl.findComponentById(ResourceTable.Id_cancel);
//title给标题设置内容
title.setText(msg);
//给两个按钮添加单击事件
submit.setClickedListener(new Component.ClickedListener() {
@Override
public void onClick(Component component) {
title.setText("点击了确定按钮");
}
});
cancel.setClickedListener(new Component.ClickedListener() {
@Override
public void onClick(Component component) {
cd.destroy();
}
});
//此时布局对象跟弹框还没有任何关系
//还需要吧布局对象交给弹框才可以
cd.setContentCustomComponent(dl);
//让弹框展示出来
cd.show();
}
}