Kotlin for Android。吐司

时间:2016-04-24 16:43:28

标签: android kotlin

在Android的不同Kotlin示例中,我看到吐司(“Some message ...”)或toastLong(“Some long message”)。例如:

view.setOnClickListener { toast("Click") }

据我所知,它是活动的扩展功能。

如何定义这个toast()函数以及在哪里(在什么地方)能够通过项目使用它?

16 个答案:

答案 0 :(得分:68)

它可以是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!")
}

答案 1 :(得分:35)

它实际上是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添加到您的活动中。

答案 2 :(得分:32)

这是Kotlin的一线解决方案:

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

答案 3 :(得分:3)

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

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

用法:

在活动中,

toast("Toast Message")

在片段中,

context?.toast("Toast Message")

答案 4 :(得分:2)

我从给定的链接中找到了Toast非常简单的方法 https://gist.github.com/felipearimateia/ee651e2694c21de2c812063980b89ca3。在此链接中,使用Activity而不是Context。试试吧。

答案 5 :(得分:2)

Anko Kotlin 一起使用时,在片段内使用:

  • activity.toast("字符串消息")或
  • context.toast(" string message")

答案 6 :(得分:2)

一个非常简单的扩展。

将此添加到 toast.kt 文件

import android.content.Context
import android.widget.Toast
import androidx.fragment.app.Fragment

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

inline fun Fragment.toast(message:()->String){
   Toast.makeText(this.context, message() , Toast.LENGTH_LONG).show()
}

然后你就会有

toast {
   "Hello World"
}

在片段和活动中。

答案 7 :(得分:1)

它只是Context的扩展函数(就像其他指出的一样)。

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

答案 8 :(得分:1)

添加@nhaarman的答案 - >您可能还想添加resourceId支持

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

答案 9 :(得分:1)

尝试一下

活动中

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()

答案 10 :(得分:0)

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

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()
    }

谢谢!

答案 11 :(得分: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

答案 12 :(得分:0)

具有背景色的自定义吐司文本大小和没有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()
}

答案 13 :(得分:0)

借助此扩展功能,您可以在[活动]和[片段]中调用它们,也可以在[活动]和[片段]中调用它们,也可以将 this 作为Context传递给Activity或{{ 1}}对于Fragments,它也是默认情况下使用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")

答案 14 :(得分:0)

片段

中显示不从UI线程显示的Toast
activity?.runOnUiThread {
        Toast.makeText(context, "Image saved to the Gallery", Toast.LENGTH_SHORT).show()
    }

答案 15 :(得分:0)

Kotlin的Android Toast

活动

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

片段

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