知识分享—在页面跳转中附加对话框

系统 OpenHarmony
本次的知识分享以一个简单的Demo为例,向大家展示如何在页面跳转中恰当地穿插CommonDialog组件。话不多说,发车吧!

​想了解更多内容,请访问:​

​51CTO和华为官方合作共建的鸿蒙技术社区​

​https://ost.51cto.com​

前言

之前在社区贴出的帖子中,我分享的内容以理论知识为主。而在今后的知识分享中,笔者将通过展示一些简单实用的Demo样例,以实践的形式与大家一起学习探讨HarmonyOS的相关技术知识。

正文

Dialog组件(对话框组件),是UI设计中经常会用到的一种页面布局元素。Dialog可以与许多交互事件进行关联,当用户由于手误而造成错误的交互操作时,Dialog能及时起到缓冲的作用,为用户提供再次交互的机会。Dialog有三种类型,分别是ToastDialog,PopupDialog和CommonDialog。

本次的知识分享以一个简单的Demo为例,向大家展示如何在页面跳转中恰当地穿插CommonDialog组件。话不多说,发车吧!

首先,我们不妨创建一个名为“Dialog”的新工程,相关选项的勾选如下图所示;

在实现页面跳转的逻辑之前,我们需要先创建新的AbilitySlice和xml文件来构建一个页面;

(1)打开entry>src>main>java>slice,右击sIice并新建一个Java类,将其命名为SecondAbilitySlice;

(2)打开entry>src>main>resources>base>layout,右击layout并新建一个Layout Resource File,将其命名为second;

(3)打开新创建的SecondAbilitySlice,在"public class SecondAbilitySlice{ }"的基础上加入如下代码(用于完成页面的基础布置,并将SecondAbilitySlice与second.xml文件进行绑定);

public class SecondAbilitySlice extends AbilitySlice {
@Override
protected void onStart(Intent intent) { //设置onStart()回调函数
super.onStart(intent);
super.setUIContent(ResourceTable.Layout_second); //将SecondAbilitySlice与second.xml文件绑定
}

接着,我们通过xml布局的方式,为MainAbilitySlice和SecondAbilitySlice分别添加一个文本组件;

(4)打开entry>src>main>resources>base>layout>ability_main_xml,加入一个Text组件,示例代码如下;

<?xml version="1.0" encoding="utf-8"?>
<DependentLayout //将Directional布局改为Dependent布局
xmlns:ohos="http://schemas.huawei.com/res/ohos"
ohos:background_element="white"
ohos:height="match_parent"
ohos:width="match_parent"
ohos:alignment="center"
ohos:orientation="vertical">
<Text
ohos:id="$+id:text"
ohos:height="match_content"
ohos:width="match_content"
ohos:center_in_parent="true" //将Text组件摆放在页面最中心的位置
ohos:text="AbilitySlice1"
ohos:text_size="30vp"
ohos:text_color="blue"/>
</DependentLayout>

(5)打开新创建的second.xml,加入一个Text组件,并将页面背景色改为黑色,示例代码如下:

<?xml version="1.0" encoding="utf-8"?>
<DependentLayout //将Directional布局改为Dependent布局
xmlns:ohos="http://schemas.huawei.com/res/ohos"
ohos:background_element="black" //将背景色调为黑色
ohos:height="match_parent"
ohos:width="match_parent"
ohos:orientation="vertical">
<Text
ohos:id="$+id:Text"
ohos:height="match_content"
ohos:width="match_content"
ohos:center_in_parent="true" //将Text组件摆放在页面最中心的位置
ohos:text="AbilitySlice2"
ohos:text_size="30vp"
ohos:text_color="white"/>
</DependentLayout>

最后,我们在MainAbilitySlice与SecondAbilitySlice中分别新创建CommonDialog组件,并写入相关事件逻辑;

(6)打开MainAbilitySlice,在onStart()函数的"{ }"内加入如下代码;

 CommonDialog dialog=new CommonDialog(getContext());           // 新创建一个CommonDialog组件,命名为dialog
dialog.setSize(800,400); //设置CommonDialog的宽度和高度
dialog.setTitleText(" 提示"); //设置CommonDialog的标题文本的内容
dialog.setContentText(" 确认切换页面?"); //设置CommonDialog的内容文本的内容
dialog.setButton(IDialog.BUTTON1,"确认",(iDialog, i) -> dialog.destroy()); //设置CommonDialog的第一个按钮,用户触发此按钮后CommonDialog将销毁
dialog.setButton(IDialog.BUTTON2,"取消",(iDialog, i) -> dialog.hide()); //设置CommonDialog的第二个按钮,用户触发此按钮后CommonDialog将隐藏
dialog.setDestroyedListener(new CommonDialog.DestroyedListener() { //设置CommonDialog的销毁监听器
@Override
public void onDestroy() {
present(new SecondAbilitySlice(),new Intent()); //设置present(),当CommonDialog被销毁后执行此方法,用户界面将从原来的MainAbilitySlice导航至系统新创建的SecondAbilitySlice实例中。
}
});
dialog.hide(); //将CommonDialog的初始状态设置为隐藏状态(初始状态默认为隐藏状态)
Text text1=(Text) findComponentById(ResourceTable.Id_text); //定义已在ability_main_xml中创建的Text组件,命名为text1
text1.setClickedListener(new Component.ClickedListener() { //设置Text的点击监听器
@Override
public void onClick(Component component) {
dialog.show(); //设置show(),当用户点击Text组件时执行此方法,CommonDialog将进入前台与用户交互
}
});

(7)打开SecondAbilitySlice,在onStart()函数的"{ }”内加入如下代码;

  CommonDialog Dialog=new CommonDialog(getContext());
Dialog.setSize(800,400);
Dialog.setTitleText(" 提示");
Dialog.setContentText(" 确认切换页面?");
Dialog.setButton(IDialog.BUTTON1,"确认",(iDialog, i) -> Dialog.destroy());
Dialog.setButton(IDialog.BUTTON2,"取消",(iDialog, i) -> Dialog.hide());
Dialog.setDestroyedListener(new CommonDialog.DestroyedListener() {
@Override
public void onDestroy() {
terminate(); //设置terminate(),当CommonDialog被销毁时执行此方法,以结束SecondAbilitySlice的生命周期,用户界面返回原来的MainAbilitySlice实例中
}
});
Text text1=(Text) findComponentById(ResourceTable.Id_Text);
text1.setClickedListener(new Component.ClickedListener() {
@Override
public void onClick(Component component) {
Dialog.show();
}
});

OK,大功告成!调用远程模拟器运行此Demo,便可查看相应的点击效果。

结语

本期的知识分享在这就告一段落了。

​想了解更多内容,请访问:​

​51CTO和华为官方合作共建的鸿蒙技术社区​

​https://ost.51cto.com​

责任编辑:jianghua 来源: 鸿蒙社区
相关推荐

2011-07-21 15:50:42

jQuery Mobi页面对话框

2011-07-01 11:33:00

Qt 模态 非模态

2010-01-22 16:27:19

VB.NET关于对话框

2021-01-29 09:48:17

鸿蒙HarmonyOS应用开发

2012-12-03 10:47:54

WebJQuery控件

2011-06-02 10:37:02

Android 对话框

2010-01-13 18:22:55

VB.NET对话框

2010-08-05 10:42:41

Android开发Android高级编程

2010-01-28 16:55:26

Android对话框

2009-12-11 15:35:50

PHP弹出对话框

2009-12-28 13:47:35

WPF对话框

2009-12-28 14:32:31

WPF窗体对话框

2009-11-03 09:21:26

Visual Stud

2019-01-09 11:30:07

Windows10空白对话框命令

2009-07-02 09:25:41

JSP实现页面跳转

2011-05-20 16:49:21

VB.NET

2010-01-11 09:33:32

VB.NET对话框调用

2009-12-29 15:24:48

WPF对话框

2011-11-23 09:47:36

Winform

2011-07-22 15:32:53

iPhone 按钮 对话框
点赞
收藏

51CTO技术栈公众号