【发布时间】:2021-12-17 04:13:56
【问题描述】:
我想要在 Jetpack Compose 中自定义 Toast,但没有找到任何有用的文档,任何帮助都将不胜感激
【问题讨论】:
标签: android android-jetpack-compose android-toast
我想要在 Jetpack Compose 中自定义 Toast,但没有找到任何有用的文档,任何帮助都将不胜感激
【问题讨论】:
标签: android android-jetpack-compose android-toast
不推荐使用自定义 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 的建议 前景。
【讨论】:
直到版本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;
}
【讨论】: