方法 setView 已弃用
Method setView is deprecated
当我在我的应用程序上执行自定义 toast 时,我注意到 setView 已被弃用。
有人对此有解决方案吗?
toast.setView(customView);
由于 setView
已弃用:
This method was deprecated in API level 30.
Custom toast views are deprecated. Apps can create a standard text toast with the makeText(android.content.Context, java.lang.CharSequence, int)
method, or use a Snackbar
when in the foreground. Starting from Android Build.VERSION_CODES#R
, apps targeting API level Build.VERSION_CODES#R
or higher that are in the background will not have custom toast views displayed.
这是有道理的 Toasts 可以显示在其他应用程序之上,一些应用程序可以通过在其他应用程序之上创建自定义 Toasts 来欺骗用户,即使他们的应用程序在后台也是如此。但是,如果您的应用程序在前台,您的自定义 Toast 仍将显示在所有 Android 个版本中。
在 Toast 上设置自定义视图的解决方案已弃用 API 30 及更高版本。
文档说
This method was deprecated in API level 30. Custom toast views are
deprecated. Apps can create a standard text toast with the
makeText(android.content.Context, java.lang.CharSequence, int) method,
or use a Snackbar when in the foreground. Starting from Android
Build.VERSION_CODES#R, apps targeting API level Build.VERSION_CODES#R
or higher that are in the background will not have custom toast views
displayed.
虽然有一些情况的解决方法
Toast.makeText(applicationContext,
HtmlCompat.fromHtml("<font color='red'>custom toast message</font>", HtmlCompat.FROM_HTML_MODE_LEGACY),
Toast.LENGTH_LONG).show()
Html颜色标签也可以是<font color='#ff6347'>
对于每一个与显示文本有关的修改,上面的解决方案就足够了。例如,您可以通过插入 <b>my text</b>
使文本 加粗 ,或者您可能想将 font-family 更改为 <font font-family='...'> my text </font>
对于所有这些更改,解决方案就足够了。
如果您想使用 background-color 等属性修改容器,唯一的选择是使用 Snackbar。无法再为 Toast 修改视图。
由于其他答案已经提到了使用 snackbar/deafult toast 的原因,我将提供我使用的替代方法。
我们可能无法自定义 toast 背景,但我们可以使用 Spannable string 自定义 toast 中显示的文本。将显示默认的 toast 背景,但使用包下可用的不同跨度样式:android.text.style,我们可以在 toast 消息中实现自定义文本样式。
自定义 toast 示例,其中文本颜色为绿色,文本大小为 200 像素。
val spannableString = SpannableString("Custom toast")
spannableString.setSpan(
ForegroundColorSpan(Color.GREEN), 0, spannableString.length, 0
)
spannableString.setSpan(
AbsoluteSizeSpan(200), 0, spannableString.length, 0
)
val toast = Toast.makeText(context, spannableString, Toast.LENGTH_SHORT)
toast.show()
可生成的字符串参考:spantastic text styling with spans
(PS:当应用 运行 或自定义通知向用户显示重要消息时,我们始终可以显示自定义对话框。)
当我在我的应用程序上执行自定义 toast 时,我注意到 setView 已被弃用。
有人对此有解决方案吗?
toast.setView(customView);
由于 setView
已弃用:
This method was deprecated in API level 30. Custom toast views are deprecated. Apps can create a standard text toast with the
makeText(android.content.Context, java.lang.CharSequence, int)
method, or use aSnackbar
when in the foreground. Starting from AndroidBuild.VERSION_CODES#R
, apps targeting API levelBuild.VERSION_CODES#R
or higher that are in the background will not have custom toast views displayed.
这是有道理的 Toasts 可以显示在其他应用程序之上,一些应用程序可以通过在其他应用程序之上创建自定义 Toasts 来欺骗用户,即使他们的应用程序在后台也是如此。但是,如果您的应用程序在前台,您的自定义 Toast 仍将显示在所有 Android 个版本中。
在 Toast 上设置自定义视图的解决方案已弃用 API 30 及更高版本。
文档说
This method was deprecated in API level 30. Custom toast views are deprecated. Apps can create a standard text toast with the makeText(android.content.Context, java.lang.CharSequence, int) method, or use a Snackbar when in the foreground. Starting from Android Build.VERSION_CODES#R, apps targeting API level Build.VERSION_CODES#R or higher that are in the background will not have custom toast views displayed.
虽然有一些情况的解决方法
Toast.makeText(applicationContext,
HtmlCompat.fromHtml("<font color='red'>custom toast message</font>", HtmlCompat.FROM_HTML_MODE_LEGACY),
Toast.LENGTH_LONG).show()
Html颜色标签也可以是<font color='#ff6347'>
对于每一个与显示文本有关的修改,上面的解决方案就足够了。例如,您可以通过插入 <b>my text</b>
使文本 加粗 ,或者您可能想将 font-family 更改为 <font font-family='...'> my text </font>
对于所有这些更改,解决方案就足够了。
如果您想使用 background-color 等属性修改容器,唯一的选择是使用 Snackbar。无法再为 Toast 修改视图。
由于其他答案已经提到了使用 snackbar/deafult toast 的原因,我将提供我使用的替代方法。
我们可能无法自定义 toast 背景,但我们可以使用 Spannable string 自定义 toast 中显示的文本。将显示默认的 toast 背景,但使用包下可用的不同跨度样式:android.text.style,我们可以在 toast 消息中实现自定义文本样式。
自定义 toast 示例,其中文本颜色为绿色,文本大小为 200 像素。
val spannableString = SpannableString("Custom toast")
spannableString.setSpan(
ForegroundColorSpan(Color.GREEN), 0, spannableString.length, 0
)
spannableString.setSpan(
AbsoluteSizeSpan(200), 0, spannableString.length, 0
)
val toast = Toast.makeText(context, spannableString, Toast.LENGTH_SHORT)
toast.show()
可生成的字符串参考:spantastic text styling with spans
(PS:当应用 运行 或自定义通知向用户显示重要消息时,我们始终可以显示自定义对话框。)