当我在我的应用程序上做自定义吐司时,我注意到setView已被弃用。
有人能解决这个问题吗?
toast.setView(customView);
xoefb8l81#
由于setView已弃用:此方法在API级别30中已弃用。自定义吐司视图已弃用。应用可以使用makeText(android.content.Context, java.lang.CharSequence, int)方法创建标准文本Toast,或在前台使用Snackbar。从Android Build.VERSION_CODES#R开始,面向API级别Build.VERSION_CODES#R或更高级别的后台应用将不会显示自定义Toast视图。Toast可以显示在其他应用程序的顶部,这是有道理的,一些应用程序可以通过在其他应用程序的顶部创建自定义Toast来欺骗用户,即使他们的应用程序在后台。但是,如果您的应用程序在前台,您的自定义Toast仍然会显示在所有Android版本中。
setView
makeText(android.content.Context, java.lang.CharSequence, int)
Snackbar
Build.VERSION_CODES#R
0x6upsns2#
在吐司上设置自定义视图的解决方案不适用于API 30及以后版本。文件上说此方法在API级别30中已弃用。自定义吐司视图已弃用。应用可以使用makeText(android.content.Context,java.lang.CharSequence,int)方法创建标准文本toast,或在前台使用小吃条。从Android Build.VERSION_CODES#R开始,面向API级别Build.VERSION_CODES#R或更高级别的应用在后台将不会显示自定义toast视图。有一个walkaround为某些情况下虽然
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 font-family='...'> my text </font>更改font-family对于所有这些更改,该解决方案就足够了。如果你想修改容器的属性,比如background-color,唯一的选择就是使用Snackbar。视图不能再为吐司修改。
<font color='#ff6347'>
<b>my text</b>
<font font-family='...'> my text </font>
scyqe7ek3#
由于其他答案已经提到了原因,并使用snackbar/deafult吐司,我将提供我使用的替代方案。我们可能无法自定义吐司背景,但我们可以使用Spannable string来自定义toast中显示的文本。将显示默认的toast背景,但使用package下提供的不同span样式:android.text.style,我们可以实现自定义文本样式的吐司消息。示例自定义吐司,显示文本颜色为绿色且文本大小为200像素的toast。
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:我们可以在应用程序运行时始终显示自定义对话框或自定义通知,以向用户显示重要消息。
gj3fmq9x4#
我写了一个简短的Kotlin扩展函数来使用spannable来实现这一点。注意,它返回一个你需要“显示”的吐司。
fun Context.spToPix(sp: Int): Int = (sp * Resources.getSystem().displayMetrics.scaledDensity).toInt() fun Context.fontSizeToast( fontSize: Int, mess: String, displayTime: Int = Toast.LENGTH_LONG ): Toast { val ssMess = SpannableString(mess) ssMess.setSpan( AbsoluteSizeSpan(spToPix(fontSize)), 0, ssMess.length, 0 ) return Toast.makeText(this, ssMess, displayTime) }
4条答案
按热度按时间xoefb8l81#
由于
setView
已弃用:此方法在API级别30中已弃用。自定义吐司视图已弃用。应用可以使用
makeText(android.content.Context, java.lang.CharSequence, int)
方法创建标准文本Toast,或在前台使用Snackbar
。从AndroidBuild.VERSION_CODES#R
开始,面向API级别Build.VERSION_CODES#R
或更高级别的后台应用将不会显示自定义Toast视图。Toast可以显示在其他应用程序的顶部,这是有道理的,一些应用程序可以通过在其他应用程序的顶部创建自定义Toast来欺骗用户,即使他们的应用程序在后台。但是,如果您的应用程序在前台,您的自定义Toast仍然会显示在所有Android版本中。
0x6upsns2#
在吐司上设置自定义视图的解决方案不适用于API 30及以后版本。
文件上说
此方法在API级别30中已弃用。自定义吐司视图已弃用。应用可以使用makeText(android.content.Context,java.lang.CharSequence,int)方法创建标准文本toast,或在前台使用小吃条。从Android Build.VERSION_CODES#R开始,面向API级别Build.VERSION_CODES#R或更高级别的应用在后台将不会显示自定义toast视图。
有一个walkaround为某些情况下虽然
Html颜色标签也可以是
<font color='#ff6347'>
对于每一个与显示的文本有关的修改,上述解决方案就足够了。例如,您可以通过插入
<b>my text</b>
来使文本粗体,或者您可能想使用<font font-family='...'> my text </font>
更改font-family对于所有这些更改,该解决方案就足够了。如果你想修改容器的属性,比如background-color,唯一的选择就是使用Snackbar。视图不能再为吐司修改。
scyqe7ek3#
由于其他答案已经提到了原因,并使用snackbar/deafult吐司,我将提供我使用的替代方案。
我们可能无法自定义吐司背景,但我们可以使用Spannable string来自定义toast中显示的文本。将显示默认的toast背景,但使用package下提供的不同span样式:android.text.style,我们可以实现自定义文本样式的吐司消息。
示例自定义吐司,显示文本颜色为绿色且文本大小为200像素的toast。
可跨越的字符串引用:spantastic text styling with spans
(PS:我们可以在应用程序运行时始终显示自定义对话框或自定义通知,以向用户显示重要消息。
gj3fmq9x4#
我写了一个简短的Kotlin扩展函数来使用spannable来实现这一点。注意,它返回一个你需要“显示”的吐司。