如何在Android上使用Kotlin显示Toast?


75

在Android的不同Kotlin示例中,我看到toast("Some message...")toastLong("Some long message")。例如:

view.setOnClickListener { toast("Click") }

据我了解,它是的扩展功能Activity

您如何以及在何处定义此toast()功能,以便可以在整个项目中使用它?


您可以使用这个简单的Kotlin友好库。github.com/Sathawale27/KotlinToasts
Sarvesh Athawale

我在此链接中回答:stackoverflow.com/a/63806312/10300202我希望得到帮助
Javid Sattar

Answers:


128

它可以是以下内容的扩展功能Context

fun Context.toast(message: CharSequence) = 
    Toast.makeText(this, message, Toast.LENGTH_SHORT).show()

您可以将其放置在项目中的任何位置,完全由您决定。例如,您可以定义一个文件mypackage.util.ContextExtensions.kt并将其作为顶级功能放置在此处。

只要有访问Context实例的权限,就可以导入此功能并使用它:

import mypackage.util.ContextExtensions.toast

fun myFun(context: Context) {
    context.toast("Hello world!")
}

59

这是Kotlin中的一线解决方案:

Toast.makeText(this@MainActivity, "Its toast!", Toast.LENGTH_SHORT).show()

1
Thx @ Zeero0,为+1 this@MainActivity
拉维·瓦尼亚

我是Kotlin的新手,请原谅我的无知,但这如何回答这个问题?

47

它实际上是Anko的一部分Kotlin扩展程序。语法如下:

toast("Hi there!")
toast(R.string.message)
longToast("Wow, such a duration")

在您的应用程序级别 build.gradle,添加implementation "org.jetbrains.anko:anko-common:0.8.3"

添加import org.jetbrains.anko.toast到您的活动中。


看来Android尚未正式支持此功能(我在Android开发人员的网站上找不到对Anko的任何引用)。为什么会这样呢?看起来很有趣。
Dakatine

2
一段时间以前,Kotlin受到Google的正式支持。Anko似乎是一个未完成的项目。目标是完全将XML替换为布局,但是他们在布局方面做得不好。Anko的许多好处也逐渐融入了Kotlin。
Muz

谢谢,这非常有帮助。我现在想知道为什么Android的Kotlin扩展尚未提供此扩展。还是它,我找不到如何添加它?:thinking:
Dakatine '18

10

尝试这个

活动中

Toast.makeText(applicationContext, "Test", Toast.LENGTH_LONG).show()

要么

Toast.makeText(this@MainActiivty, "Test", Toast.LENGTH_LONG).show()

片段中

Toast.makeText(activity, "Test", Toast.LENGTH_LONG).show()

要么

Toast.makeText(activity?.applicationContext, "Test", Toast.LENGTH_LONG).show()

4

如果您不想使用anko并想创建自己的Toast扩展名。您可以创建在kotlin文件中定义的内联(或不具有内联)扩展名(不带类),并且可以在任何类中访问此函数。

inline fun Context.toast(message:String){
   Toast.makeText(this, message , duration).show()
}

用法:

在活动中,

toast("Toast Message")

在片段中

context?.toast("Toast Message")

3

当将AnkoKotlin结合使用时,在片段内部使用以下任一方法:

 activity.toast("string message") 

要么

 context.toast("string message")

要么

 view.holder.context.toast("string message")


1

它只是它的扩展功能Context(就像已经指出的其他功能一样)。

您可以在Anko中找到很多预定义的android扩展功能,这可能也是许多教程使用的功能。


1

只需添加@nhaarman的答案->您可能还希望添加resourceId支持

fun Context.toast(resourceId: Int) = toast(getString(resourceId))
fun Context.toast(message: CharSequence) = 
    Toast.makeText(this, message, Toast.LENGTH_SHORT).show()

1

从此处下载源代码(Android Kotlin中的Custom Toast

fun Toast.createToast(context: Context, message: String, gravity: Int, duration: Int, backgroucolor: String, imagebackgroud: Int) {
        val inflater: LayoutInflater = context.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater
        /*first parameter is the layout you made
        second parameter is the root view in that xml
         */
        val layout = inflater.inflate(R.layout.custom_toast, (context as Activity).findViewById(R.id.custom_toast_container))

        layout.findViewById(R.id.tv_message).text = message
        layout.setBackgroundColor(Color.parseColor(backgroucolor))
        layout.findViewById(R.id.iv_image).iv_image.setImageResource(imagebackgroud)
        setGravity(gravity, 0, 100)
        setDuration(Toast.LENGTH_LONG);

        setView(layout);
        show()
    }

谢谢!


1

使用此Toasts扩展功能,您可以在“活动”和“片段”中调用它们,可以将作为Context“活动”或getApplication()“片段”来传递,它也是Toast.LENGTH_SHORT默认生成的,因此您不必担心将其作为参数传递,但也可以根据需要覆盖它。

科特林

fun Context.toast(context: Context = applicationContext, message: String, duration: Int = Toast.LENGTH_SHORT){
        Toast.makeText(context, message , duration).show()
    }

用法

toast(this, "John Doe")

如果要覆盖持续时间。

toast(this, "John Doe", Toast.LENGTH_LONG)

1

片段中显示不是来自UI线程的Toast

activity?.runOnUiThread {
        Toast.makeText(context, "Image saved to the Gallery", Toast.LENGTH_SHORT).show()
    }

0

我使用它的方式只是创建一个Object/Class

object UtilKotlin {
    fun showMessage(context: Context, message: String) {
        Toast.makeText(context, message, Toast.LENGTH_SHORT).show()
    }
}

并调用方法

UtilKotlin.showMessage(activity, "Sets 0 !") // in activity trying this

0

带有背景色的自定义Toast文本大小且不会夸大XML文件尝试代码而不设置背景色

    fun theTOAST(){

    val toast = Toast.makeText(this@MainActivity, "Use View Person List",Toast.LENGTH_LONG)
    val view = toast.view
    view.setBackgroundColor(Color.TRANSPARENT)
    val text = view.findViewById(android.R.id.message) as TextView
    text.setTextColor(Color.BLUE)
    text.textSize = (18F)
    toast.show()
}

0

科特林Android Toast

活动

Toast.makeText(applicationContext, "message...", Toast.LENGTH_SHORT).show()

分段

Toast.makeText(activity, "message...", Toast.LENGTH_SHORT).show()
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.