toast.view.background为null时如何自定义Toast背景颜色?
How to customize Toast background color when toast.view.background is null?
在 Toast 的视图背景上设置颜色过滤器似乎是最好的方法。但是 toast.view.background
是 null
所以 我得到了一个 NPE 并且 setColorFilter()
方法失败了。
fun showToast(context: Context, text: String) {
val toast = Toast.makeText(context, text, Toast.LENGTH_SHORT)
// customize background color
toast.view.background.setColorFilter(
ContextCompat.getColor(context, R.color.toast_background),
PorterDuff.Mode.SRC_IN
)
toast.show()
}
我还尝试创建一个自定义可绘制对象并将 toast.view.background
设置为可绘制对象,但它显示我的自定义可绘制对象 在 默认 Toast 背景之后。
view.background = ContextCompat.getDrawable(context, R.drawable.toast_background)
您应该扩充您的自定义视图并通过 setView
将其设置为 toast 视图。如果您只能自定义背景,则可能会导致错误。例如,一些不流行的智能手机型号上的 toast 可能会被白色主题的 toast 覆盖(白色背景,上面有黑色文本)。这是自定义整个 toast 视图的首选方式
您可以创建自定义布局文件并从中扩展。这将使您可以灵活地设置背景和添加更多要查看的小部件。在下面的示例中,我将背景颜色设置为红色,文本颜色设置为白色,但您可以根据需要进行自定义。
- 创建
toast_with_custom_view
布局文件并添加以下内容:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@android:color/holo_red_dark"
android:orientation="vertical">
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@android:color/white" />
</LinearLayout>
- 使用以下代码扩展自定义视图:
private fun showToast() {
// inflate the custom layout
val toastView = layoutInflater.inflate(R.layout.toast_with_custom_view, null)
toastView.findViewById<TextView>(R.id.textView).text = "Hello, world!"
val toast = Toast(applicationContext)
// set custom view
toast.view = toastView
toast.show()
}
在 Toast 的视图背景上设置颜色过滤器似乎是最好的方法。但是 toast.view.background
是 null
所以 我得到了一个 NPE 并且 setColorFilter()
方法失败了。
fun showToast(context: Context, text: String) {
val toast = Toast.makeText(context, text, Toast.LENGTH_SHORT)
// customize background color
toast.view.background.setColorFilter(
ContextCompat.getColor(context, R.color.toast_background),
PorterDuff.Mode.SRC_IN
)
toast.show()
}
我还尝试创建一个自定义可绘制对象并将 toast.view.background
设置为可绘制对象,但它显示我的自定义可绘制对象 在 默认 Toast 背景之后。
view.background = ContextCompat.getDrawable(context, R.drawable.toast_background)
您应该扩充您的自定义视图并通过 setView
将其设置为 toast 视图。如果您只能自定义背景,则可能会导致错误。例如,一些不流行的智能手机型号上的 toast 可能会被白色主题的 toast 覆盖(白色背景,上面有黑色文本)。这是自定义整个 toast 视图的首选方式
您可以创建自定义布局文件并从中扩展。这将使您可以灵活地设置背景和添加更多要查看的小部件。在下面的示例中,我将背景颜色设置为红色,文本颜色设置为白色,但您可以根据需要进行自定义。
- 创建
toast_with_custom_view
布局文件并添加以下内容:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@android:color/holo_red_dark"
android:orientation="vertical">
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@android:color/white" />
</LinearLayout>
- 使用以下代码扩展自定义视图:
private fun showToast() {
// inflate the custom layout
val toastView = layoutInflater.inflate(R.layout.toast_with_custom_view, null)
toastView.findViewById<TextView>(R.id.textView).text = "Hello, world!"
val toast = Toast(applicationContext)
// set custom view
toast.view = toastView
toast.show()
}