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?

Andrew
quelle
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!")
}
Nhaarman
quelle
58

Dies ist eine einzeilige Lösung in Kotlin:

Toast.makeText(this@MainActivity, "Its toast!", Toast.LENGTH_SHORT).show()
Zeero0
quelle
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.

Muz
quelle
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()
Der Bala
quelle
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")
Aziz
quelle
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")
Vishnu Benny
quelle
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.

Lovis
quelle
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()
Algar
quelle
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!

Deepshikha Puri
quelle
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)
Gastón Saillén
quelle
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()
    }
norbDEV
quelle
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
Sam
quelle
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()
}
Vektor
quelle
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()
Aftab Alam
quelle