美文网首页
【鸿蒙】显示一个自定义即时反馈(类似 Android 中的 To

【鸿蒙】显示一个自定义即时反馈(类似 Android 中的 To

作者: 古舟咕咕 | 来源:发表于2021-08-12 15:35 被阅读0次

    写在前面:本文章创建的是鸿蒙 Java 开发项目,使用 Java 语言进行开发。

    一、背景介绍

    在 Android 中,我们通常会让应用程序显示一个 Toast 来通知用户做了什么事情。但是在鸿蒙中,显示这样一个消息的方法不同于 Android ,需要用到 ToastDialog 来实现。

    温馨提示:由于 ToastDialog 的默认样式过于简陋,并且不美观,所以需要进行自定义,以达到与 Android 相似的效果。

    二、实现过程

    1. 首先在 MyApplication.java 中添加两个静态方法。

    src/main/java/com/example/toastdemo/MyApplication.java

    public static void showToast(Context context, String msgStr, int position) {
        DirectionalLayout toastLayout = (DirectionalLayout) LayoutScatter.getInstance(context)
                .parse(ResourceTable.Layout_layout_toast, null, false);
        Text toastMsg = (Text) toastLayout.findComponentById(ResourceTable.Id_msg_toast);
        toastMsg.setText(msgStr);
        new ToastDialog(context)
                .setContentCustomComponent(toastLayout)
                .setSize(DirectionalLayout.LayoutConfig.MATCH_CONTENT, DirectionalLayout.LayoutConfig.MATCH_CONTENT)
                .setAlignment(position)
                .show();
    }
    
    public static void showToast(Context context, int msgResId, int position) {
        DirectionalLayout toastLayout = (DirectionalLayout) LayoutScatter.getInstance(context)
                .parse(ResourceTable.Layout_layout_toast, null, false);
        Text toastMsg = (Text) toastLayout.findComponentById(ResourceTable.Id_msg_toast);
        toastMsg.setText(msgResId);
        new ToastDialog(context)
                .setContentCustomComponent(toastLayout)
                .setSize(DirectionalLayout.LayoutConfig.MATCH_CONTENT, DirectionalLayout.LayoutConfig.MATCH_CONTENT)
                .setAlignment(position)
                .show();
    }
    
    2. 自定义 Toast 的布局文件。

    src/main/resources/base/layout/layout_toast.xml

    <?xml version="1.0" encoding="utf-8"?>
    <DirectionalLayout
        xmlns:ohos="http://schemas.huawei.com/res/ohos"
        ohos:height="match_content"
        ohos:width="match_content"
        ohos:orientation="vertical">
    
        <Text
            ohos:id="$+id:msg_toast"
            ohos:height="match_content"
            ohos:width="match_content"
            ohos:background_element="$graphic:background_toast"
            ohos:bottom_padding="6vp"
            ohos:layout_alignment="center"
            ohos:left_padding="16vp"
            ohos:multiple_lines="true"
            ohos:right_padding="16vp"
            ohos:text_color="$color:toast_msg_color"
            ohos:text_size="16fp"
            ohos:top_padding="6vp"/>
    </DirectionalLayout>
    
    3. 自定义 Toast 的背景资源文件。

    src/main/resources/base/graphic/background_toast.xml

    <?xml version="1.0" encoding="utf-8"?>
    <shape xmlns:ohos="http://schemas.huawei.com/res/ohos"
           ohos:shape="rectangle">
        <corners
            ohos:radius="50vp"/>
        <solid
            ohos:color="$color:toast_bg_color"/>
    </shape>
    
    4. 字符串、颜色的资源文件。

    (1) src/main/resources/base/element/string.json

    {
      "string": [
        {
          "name": "mainability_toast_msg_center",
          "value": "This is a center toast!"
        }
      ]
    }
    

    (2) src/main/resources/base/element/color.json

    {
      "color": [
        {
          "name": "toast_bg_color",
          "value": "#ff666666"
        },
        {
          "name": "toast_msg_color",
          "value": "#ffffffff"
        }
      ]
    }
    
    5. 在 Java 代码中使用自定义 Toast。

    src/main/java/com/example/toastdemo/MainAbility.java

    // 显示一个居中的 Toast
    MyApplication.showToast(this, ResourceTable.String_mainability_toast_msg_center, LayoutAlignment.CENTER);
    
    // 显示一个底部的 Toast
    MyApplication.showToast(this, "This is a bottom toast!", LayoutAlignment.BOTTOM);
    
    // 显示一个顶部的 Toast
    MyApplication.showToast(this, "This is a top toast!", LayoutAlignment.TOP);
    

    三、效果展示

    捕获.PNG

    文章到这里就结束了,如果帮到了你,不要忘了点个赞哦!

    相关文章

      网友评论

          本文标题:【鸿蒙】显示一个自定义即时反馈(类似 Android 中的 To

          本文链接:https://www.haomeiwen.com/subject/lxslbltx.html