In verschiedenen Kotlin Beispielen für Android sehe ich toast("Some message...")
oder toastLong("Some long message")
. Zum Beispiel:
view.setOnClickListener { toast("Click") }
Soweit ich weiß, handelt es sich um eine Erweiterungsfunktion für Activity
.
Wie und wo definieren Sie diese toast()
Funktion, damit Sie sie im gesamten Projekt nutzen können?
Antworten:
Es kann eine Erweiterungsfunktion sein für
Context
:fun Context.toast(message: CharSequence) = Toast.makeText(this, message, Toast.LENGTH_SHORT).show()
Sie können dies überall in Ihrem Projekt platzieren, wo genau es bei Ihnen liegt. Sie können beispielsweise eine Datei definieren
mypackage.util.ContextExtensions.kt
und dort als Funktion der obersten Ebene ablegen.Wenn Sie Zugriff auf eine
Context
Instanz haben, können Sie diese Funktion importieren und verwenden:import mypackage.util.ContextExtensions.toast fun myFun(context: Context) { context.toast("Hello world!") }
quelle
Dies ist eine einzeilige Lösung in Kotlin:
Toast.makeText(this@MainActivity, "Its toast!", Toast.LENGTH_SHORT).show()
quelle
this@MainActivity
.Es ist eigentlich ein Teil von Anko , einer Erweiterung für Kotlin. Die Syntax lautet wie folgt:
toast("Hi there!") toast(R.string.message) longToast("Wow, such a duration")
Fügen Sie in Ihrer App-Ebene
build.gradle
hinzuimplementation "org.jetbrains.anko:anko-common:0.8.3"
Fügen Sie
import org.jetbrains.anko.toast
Ihrer Aktivität hinzu.quelle
Versuche dies
In Aktivität
Toast.makeText(applicationContext, "Test", Toast.LENGTH_LONG).show()
oder
Toast.makeText(this@MainActiivty, "Test", Toast.LENGTH_LONG).show()
Im Fragment
Toast.makeText(activity, "Test", Toast.LENGTH_LONG).show()
oder
Toast.makeText(activity?.applicationContext, "Test", Toast.LENGTH_LONG).show()
quelle
Wenn Sie
anko
Ihre eigeneToast
Erweiterung nicht verwenden und erstellen möchten . Sie können Inline-Erweiterungen (oder ohne Inline-Erweiterungen) erstellen, die in einer Kotlin-Datei (ohne Klasse) definiert sind, und damit können Sie in jeder Klasse auf diese Funktion zugreifen.inline fun Context.toast(message:String){ Toast.makeText(this, message , duration).show() }
Verwendung:
In Aktivität,
toast("Toast Message")
In Fragment,
context?.toast("Toast Message")
quelle
Bei der Verwendung von Anko mit Kotlin innerhalb Fragment Verwendung entweder:
activity.toast("string message")
oder
context.toast("string message")
oder
view.holder.context.toast("string message")
quelle
Ich habe einen sehr einfachen Weg gefunden, um über den angegebenen Link https://gist.github.com/felipearimateia/ee651e2694c21de2c812063980b89ca3 zu rösten . In diesem Link wird Aktivität anstelle von Kontext verwendet. Versuch es.
quelle
Es ist einfach eine Erweiterungsfunktion für
Context
(wie bereits erwähnt).In Anko finden Sie viele vordefinierte Android-Erweiterungsfunktionen , die wahrscheinlich auch in vielen Tutorials verwendet werden.
quelle
Nur um die Antwort von @ nhaarman hinzuzufügen -> Sie möchten wahrscheinlich auch die
resourceId
Unterstützung hinzufügenfun Context.toast(resourceId: Int) = toast(getString(resourceId)) fun Context.toast(message: CharSequence) = Toast.makeText(this, message, Toast.LENGTH_SHORT).show()
quelle
Laden Sie den Quellcode von hier herunter ( 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() }
Vielen Dank!
quelle
Mit dieser Erweiterungsfunktion für Toasts können Sie sie sowohl in Aktivitäten als auch in Fragmenten aufrufen. Sie können dies wie
Context
für Aktivitäten odergetApplication()
für Fragmente übergeben. Außerdem wird esToast.LENGTH_SHORT
standardmäßig generiert , sodass Sie sich keine Sorgen machen müssen, es als Parameter zu übergeben Sie können es aber auch überschreiben, wenn Sie es benötigen.Kotlin
fun Context.toast(context: Context = applicationContext, message: String, duration: Int = Toast.LENGTH_SHORT){ Toast.makeText(context, message , duration).show() }
Verwendung
toast(this, "John Doe")
wenn Sie die Dauer überschreiben möchten.
toast(this, "John Doe", Toast.LENGTH_LONG)
quelle
Zeigen Sie einen Toast, der nicht aus dem UI-Thread stammt , in einem Fragment an
activity?.runOnUiThread { Toast.makeText(context, "Image saved to the Gallery", Toast.LENGTH_SHORT).show() }
quelle
die Art, wie ich es benutze, einfach ein
Object
/ erstellenClass
object UtilKotlin { fun showMessage(context: Context, message: String) { Toast.makeText(context, message, Toast.LENGTH_SHORT).show() } }
und Aufrufen der Methode
UtilKotlin.showMessage(activity, "Sets 0 !") // in activity trying this
quelle
Benutzerdefinierter Toast mit Hintergrundfarbe Textgröße UND KEINE aufgeblasene XML- Datei Probieren Sie den Code aus, ohne die Hintergrundfarbe festzulegen
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() }
quelle
Android Toast für Kotlin
Toast.makeText(applicationContext, "message...", Toast.LENGTH_SHORT).show()
Toast.makeText(activity, "message...", Toast.LENGTH_SHORT).show()
quelle