[文章]HarmonyOS实战——ToastDialog组件的基本使用

阅读量0
原创
0
0
1. ToastDialog 简介



  • ToastDialog 是 CommonDialog 的子类,他们的用法几乎是一致的,只不过 ToastDialog 有自己的特性
  • ToastDialog 的组成如下:标题、提示内容、选择按钮
  • 一般只会用中间的提示内容,因为 ToastDialog 出现的意义就是用来作消息提示的
  • ToastDialog 弹框有自己的展示时间,默认展示 2 秒钟,时间到了之后弹框就会自动消失
2. ToastDialog 案例
案例:点击按钮弹出一个2秒的弹框提示信息
ability_main
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <DirectionalLayout
  3.     xmlns:ohos="http://schemas.huawei.com/res/ohos"
  4.     ohos:height="match_parent"
  5.     ohos:width="match_parent"
  6.     ohos:orientation="vertical">

  7.     <Text
  8.         ohos:id="$+id:msg"
  9.         ohos:height="match_content"
  10.         ohos:width="match_content"
  11.         ohos:text_size="30fp"
  12.         ohos:text_color="#FFFFFF"
  13.         ohos:text_alignment="center"
  14.         ohos:background_element="#464343"
  15.         />

  16. </DirectionalLayout>
复制代码

MainAbilitySlice
  1. package com.xdr630.toastapplication.slice;

  2. import com.xdr630.toastapplication.ResourceTable;
  3. import ohos.aafwk.ability.AbilitySlice;
  4. import ohos.aafwk.content.Intent;
  5. import ohos.agp.components.Button;
  6. import ohos.agp.components.Component;
  7. import ohos.agp.utils.LayoutAlignment;
  8. import ohos.agp.window.dialog.ToastDialog;

  9. public class MainAbilitySlice extends AbilitySlice implements Component.ClickedListener {
  10.     @Override
  11.     public void onStart(Intent intent) {
  12.         super.onStart(intent);
  13.         super.setUIContent(ResourceTable.Layout_ability_main);

  14.         //找到界面中的按钮
  15.         Button but = (Button) findComponentById(ResourceTable.Id_but);
  16.         //添加点击事件
  17.         but.setClickedListener(this);

  18.     }

  19.     @Override
  20.     public void onActive() {
  21.         super.onActive();
  22.     }

  23.     @Override
  24.     public void onForeground(Intent intent) {
  25.         super.onForeground(intent);
  26.     }

  27.     @Override
  28.     public void onClick(Component component) {
  29.         //出现一个 ToastDialog 弹框
  30.         // this:表示当前的弹框展示在当前的界面
  31.         ToastDialog td = new ToastDialog(this);
  32.         //给ToastDialog设置要展示的文本内容
  33.         td.setText("吐司弹框出现了");
  34.         //设置居中
  35.         td.setAlignment(LayoutAlignment.CENTER);
  36.         //设置出现的时间,单位:毫秒。下面就是设置弹框时间只有两秒
  37.         td.setDuration(2000);
  38.         //让弹框出现
  39.         td.show();
  40.     }
  41. }
复制代码

  • 运行:
  • 点击按钮,可以看到弹框提示信息出现了
  • 两秒后弹框消失
注意事项:
  • 基本使用:
  1. ToastDialog t = new ToastDialog(this);
  2. t.setText("要显示的内容")
  3. t.setAlignment(LayoutAlignment.CENTER);
  4. t.show();
复制代码

  • 相关设置:
  1. ToastDialog toastDialog = new ToastDialog(this);
  2. //设置的大小
  3. //如果不写,默认包裹内容
  4. toastDialog.setSize(DirectionalLayout.LayoutConfig.MATCH_CONTENT,
  5. DirectionalLayout.LayoutConfig.MATCH_CONTENT);
  6. //设置持续时间
  7. //如果不写,默认2秒
  8. toastDialog.setDuration(2000);
  9. //设置自动关闭
  10. //如果不写,就是自动关闭
  11. toastDialog.setAutoClosable(true);
  12. //设置位置
  13. //如果不写,默认居中
  14. toastDialog.setAlignment(LayoutAlignment.CENTER);
  15. //设置提示信息内容
  16. toastDialog.setText("要显示的内容");
  17. //让吐司展示出来
  18. toastDialog.show();
复制代码

3. ToastDialog 抽取工具类
ToastDialog 扩展
  • 可以给ToastDialog弹框一个布局
  • 把ToastDialog抽取到一个工具类当中,以后用到弹框的时候就不需要再写了,直接调用工具类的方法就可以了
案例:
  • 新建一个布局文件,名为:mytoast
  • 把父类布局也改成 match_content
  • 在布局文件写一个文本就可以了,因为ToastDialog也只有一个文本提示
  • 因为在每次弹出消息的时候要修改文本里的内容,所以要给文本一个id,文本内容是变化的,所以要在Java代码那里设置
mytoast.xml
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <DirectionalLayout
  3.     xmlns:ohos="http://schemas.huawei.com/res/ohos"
  4.     ohos:height="match_content"
  5.     ohos:width="match_content"
  6.     ohos:orientation="vertical">

  7.     <Text
  8.         ohos:id="$+id:msg"
  9.         ohos:height="match_content"
  10.         ohos:width="match_content"
  11.         ohos:text_size="30fp"
  12.         ohos:text_color="#FFFFFF"
  13.         ohos:text_alignment="center"
  14.         ohos:background_element="#464343"
  15.         />

  16. </DirectionalLayout>
复制代码

  • 新建工具包和类


ToastUtils
  1. package com.xdr630.toastapplication.MyToastUtils;

  2. import com.xdr630.toastapplication.ResourceTable;
  3. import ohos.agp.components.DirectionalLayout;
  4. import ohos.agp.components.LayoutScatter;
  5. import ohos.agp.components.Text;
  6. import ohos.agp.utils.LayoutAlignment;
  7. import ohos.agp.window.dialog.ToastDialog;
  8. import ohos.app.Context;

  9. public class ToastUtils {
  10.     public static void showDialog(Context context,String message){

  11.         //1.把 xml 文件加载到内存当中
  12.         DirectionalLayout dl = (DirectionalLayout) LayoutScatter.getInstance(context).parse(ResourceTable.Layout_mytoast, null, false);

  13.         //2.获取到当前布局对象中的文本组件
  14.         Text msg = (Text) dl.findComponentById(ResourceTable.Id_msg);

  15.         //3.把需要提示的信息设置到文本组件
  16.         msg.setText(message);

  17.         //4.创建一个ToastDialog对象
  18.         ToastDialog td = new ToastDialog(context);
  19.         //设置弹框的大小,默认是包裹内容
  20.         //宽高都要设置
  21.         td.setSize(DirectionalLayout.LayoutConfig.MATCH_CONTENT,DirectionalLayout.LayoutConfig.MATCH_CONTENT);
  22.         //设置出现的时间
  23.         td.setDuration(2000);
  24.         //设置对齐方式
  25.         td.setAlignment(LayoutAlignment.CENTER);
  26.         //把 xml 对象交给ToastDialog
  27.         td.setContentCustomComponent(dl);
  28.         //让弹框出现
  29.         td.show();
  30.     }
  31. }
复制代码

  • 在 MainAbilitySlice 中修改 onClick 方法中去调用工具类方法
  1. package com.xdr630.toastapplication.slice;

  2. import com.xdr630.toastapplication.MyToastUtils.ToastUtils;
  3. import com.xdr630.toastapplication.ResourceTable;
  4. import ohos.aafwk.ability.AbilitySlice;
  5. import ohos.aafwk.content.Intent;
  6. import ohos.agp.components.Button;
  7. import ohos.agp.components.Component;
  8. import ohos.agp.utils.LayoutAlignment;
  9. import ohos.agp.window.dialog.ToastDialog;

  10. public class MainAbilitySlice extends AbilitySlice implements Component.ClickedListener {
  11.     @Override
  12.     public void onStart(Intent intent) {
  13.         super.onStart(intent);
  14.         super.setUIContent(ResourceTable.Layout_ability_main);

  15.         //找到界面中的按钮
  16.         Button but = (Button) findComponentById(ResourceTable.Id_but);
  17.         //添加点击事件
  18.         but.setClickedListener(this);

  19.     }

  20.     @Override
  21.     public void onActive() {
  22.         super.onActive();
  23.     }

  24.     @Override
  25.     public void onForeground(Intent intent) {
  26.         super.onForeground(intent);
  27.     }

  28.     @Override
  29.     public void onClick(Component component) {

  30.         ToastUtils.showDialog(this,"吐司弹框抽取工具类");
  31.         
  32.     }
  33. }
复制代码

  • 运行:

  • 点击

  • 这个弹框就跟我们平时玩的APP中的弹框有些类似,唯一区别就是有点大,在 mytoast.xml 去调节弹框的大小,ToastUtils.java 调节弹框的位置
  • 还可以给弹框添加一个偏移量,如Y轴添加200px
  • 运行,点击后,发现弹框往上偏移了


回帖

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容图片侵权或者其他问题,请联系本站作侵删。 侵权投诉
链接复制成功,分享给好友