在Android的不同Kotlin示例中,我看到toast("Some message...")
或toastLong("Some long message")
。例如:
view.setOnClickListener { toast("Click") }
据我了解,它是的扩展功能Activity
。
您如何以及在何处定义此toast()
功能,以便可以在整个项目中使用它?
在Android的不同Kotlin示例中,我看到toast("Some message...")
或toastLong("Some long message")
。例如:
view.setOnClickListener { toast("Click") }
据我了解,它是的扩展功能Activity
。
您如何以及在何处定义此toast()
功能,以便可以在整个项目中使用它?
Answers:
它可以是以下内容的扩展功能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!")
}
它实际上是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
到您的活动中。
尝试这个
活动中
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()
我从给定的链接https://gist.github.com/felipearimateia/ee651e2694c21de2c812063980b89ca3找到了举杯的简单方法 。在此链接中,使用活动代替上下文。试试看。
从此处下载源代码(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()
}
谢谢!
使用此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)
带有背景色的自定义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()
}