【问题标题】:Custom Toast in Jetpack ComposeJetpack Compose 中的自定义 Toast
【发布时间】:2021-12-17 04:13:56
【问题描述】:

我想要在 Jetpack Compose 中自定义 Toast,但没有找到任何有用的文档,任何帮助都将不胜感激

【问题讨论】:

    标签: android android-jetpack-compose android-toast


    【解决方案1】:

    不推荐使用自定义 Toast,取而代之的是 SnackBar。
    所以他们大多不会在 Jetpack Compose 中获得支持。

    参考资料。
    StackOverflow Post - Custom Toasts are deprecated
    Android code change deprecating Custom Toast with explaination

    如前所述弃用自定义 toast,原因是:

    • 出于安全原因(go/toast-abuse),我们正在阻止后台自定义 Toast。
    • 这意味着只有当应用程序在前台时才可以自定义 toast。在前台,应用程序可以控制自己的视图 层次结构,并且能够创建任何视觉元素 否则请使用自定义吐司。
    • 如果我们声明对前台 toast 的持续支持,开发人员将处于他们要么检查 发布自定义 toast 之前应用程序的前台状态,或者他们 接受他们想要显示的信息可能不会显示在 全部。这不是很好。
    • 还希望完全避免自定义祝酒词,因为它们会损害用户体验的一致性 (https://docs.google.com/presentation/d/1r5WEofZ_G3B9M65nS37uD4RqA4iV9HUmngyE6ZpBSsw/edit#slide=id.g7b69852da2_0_0)。

    还添加了在应用程序运行时使用 Snackbars 的建议 前景。

    Toast Abuse - Attack using Android Toast

    【讨论】:

      【解决方案2】:

      直到版本30(R),setView 方法都可以使用。正如这里所说,现在要么使用标准Toast,要么转到Snackbar

      Toast -> setView

      /**
       * Set the view to show.
       *
       * @see #getView
       * @deprecated Custom toast views are deprecated. Apps can create a standard text toast with the
       *      {@link #makeText(Context, CharSequence, int)} method, or use a
       *      <a href="{@docRoot}reference/com/google/android/material/snackbar/Snackbar">Snackbar</a>
       *      when in the foreground. Starting from Android {@link Build.VERSION_CODES#R}, apps
       *      targeting API level {@link Build.VERSION_CODES#R} or higher that are in the background
       *      will not have custom toast views displayed.
       */
      @Deprecated
      public void setView(View view) {
          mNextView = view;
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-05-16
        • 2022-11-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-17
        • 1970-01-01
        相关资源
        最近更新 更多