Wie zeigt man einen Toast mit Kotlin auf Android an?


75

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?


Sie können diese einfache Kotlin-freundliche Bibliothek verwenden. github.com/Sathawale27/KotlinToasts
Sarvesh Athawale

Ich antwortete in diesem Link: stackoverflow.com/a/63806312/10300202 Ich hoffe diese Hilfe
Javid Sattar

Antworten:


128

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.ktund dort als Funktion der obersten Ebene ablegen.

Wenn Sie Zugriff auf eine ContextInstanz haben, können Sie diese Funktion importieren und verwenden:

import mypackage.util.ContextExtensions.toast

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

58

Dies ist eine einzeilige Lösung in Kotlin:

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

1
Thx @ Zeero0, +1 für this@MainActivity.
Ravi Vaniya

Ich bin neu in Kotlin, also verzeihen Sie meine Unwissenheit, aber wie beantwortet dies die Frage?

47

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.gradlehinzuimplementation "org.jetbrains.anko:anko-common:0.8.3"

Fügen Sie import org.jetbrains.anko.toastIhrer Aktivität hinzu.


Es sieht so aus, als würde dies von Android nicht offiziell unterstützt (ich konnte auf der Website des Android-Entwicklers keinen Hinweis auf Anko finden). Warum könnte es so sein? Es sieht sehr faszinierend aus.
Dakatine

2
Es war eine Weile her, bis Kotlin offiziell von Google unterstützt wurde. Anko scheint ein unvollendetes Projekt zu sein. Das Ziel war es, XML für Layouts vollständig zu ersetzen, aber sie haben es nicht so gut gemacht. Viele der Vorteile von Anko wurden auch nach und nach in Kotlin integriert.
Muz

danke, das war sehr hilfreich. Ich frage mich jetzt, warum diese Erweiterung nicht bereits von den Kotlin-Erweiterungen für Android bereitgestellt wird. Oder ist es und ich kann nicht finden, wie ich es hinzufügen soll? : Denken:
Dakatine

10

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

4

Wenn Sie ankoIhre eigene ToastErweiterung 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")

3

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


1

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.


1

Nur um die Antwort von @ nhaarman hinzuzufügen -> Sie möchten wahrscheinlich auch die resourceIdUnterstützung hinzufügen

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

1

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!


1

Mit dieser Erweiterungsfunktion für Toasts können Sie sie sowohl in Aktivitäten als auch in Fragmenten aufrufen. Sie können dies wie Contextfür Aktivitäten oder getApplication()für Fragmente übergeben. Außerdem wird es Toast.LENGTH_SHORTstandardmäß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)

1

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

0

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

0

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

0

Android Toast für Kotlin

Aktivität

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

Fragment

Toast.makeText(activity, "message...", Toast.LENGTH_SHORT).show()
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.