Dans différents exemples Kotlin pour Android, je vois toast ("Some message ...") ou toastLong ("Some long message"). Par exemple:
view.setOnClickListener { toast("Click") }
Si je comprends bien, il s’agit d’une fonction d’extension pour activité.
Comment définir cette fonction toast () et où (à quel endroit) pour pouvoir l’utiliser dans le projet?
Ce peut être une fonction d’extension pour Context
:
fun Context.toast(message: CharSequence) =
Toast.makeText(this, message, Toast.LENGTH_SHORT).show()
Vous pouvez placer ceci n'importe où dans votre projet, là où vous le souhaitez. Par exemple, vous pouvez définir un fichier mypackage.util.ContextExtensions.kt
et le placer là en tant que fonction de niveau supérieur.
Chaque fois que vous avez accès à une instance Context
, vous pouvez importer cette fonction et l'utiliser:
import mypackage.util.ContextExtensions.toast
fun myFun(context: Context) {
context.toast("Hello world!")
}
C'est en fait une partie de Anko , une extension pour Kotlin. La syntaxe est la suivante:
toast("Hi there!")
toast(R.string.message)
longToast("Wow, such a duration")
Dans votre niveau d'application build.gradle
, ajoutez implementation "org.jetbrains.anko:anko-common:0.8.3"
Ajoutez import org.jetbrains.anko.toast
à votre activité.
Il s’agit d’une solution à une ligne à Kotlin:
Toast.makeText(this@MainActivity, "Its toast!", Toast.LENGTH_SHORT).show()
Si vous utilisez Anko with Kotlin , inside fragment utilisez soit:
J'ai trouvé un moyen très facile de griller à partir d'un lien donné https://Gist.github.com/felipearimateia/ee651e2694c21de2c812063980b89ca3 . Dans ce lien, l'activité est utilisée à la place du contexte. Essayez-le.
C’est simplement une fonction d’extension pour Context
(comme d’autres déjà souligné).
Vous pouvez trouver un grand nombre de fonctions d’extension Android prédéfinies dans Anko , qui est probablement ce que beaucoup de tutoriels utilisent également.
Juste pour ajouter la réponse de @ nhaarman -> vous voulez probablement ajouter le support resourceId
fun Context.toast(resourceId: Int) = toast(getString(resourceId))
fun Context.toast(message: CharSequence) =
Toast.makeText(this, message, Toast.LENGTH_SHORT).show()
Essaye ça
En activité
Toast.makeText(applicationContext, "Test", Toast.LENGTH_LONG).show()
ou
Toast.makeText(this@MainActiivty, "Test", Toast.LENGTH_LONG).show()
Dans le fragment
Toast.makeText(activity, "Test", Toast.LENGTH_LONG).show()
Toast personnalisé avec couleur de fond Taille du texte ET AUCUN XML fichier gonflé .__ Essayez le code sans définir la couleur de fond
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()
}
Téléchargez le code source ici ( 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()
}
Merci!
la façon dont je l'utilise simplement créant un Object
/Class
object UtilKotlin {
fun showMessage(context: Context, message: String) {
Toast.makeText(context, message, Toast.LENGTH_SHORT).show()
}
}
et en appelant la méthode
UtilKotlin.showMessage(activity, "Sets 0 !") // in activity trying this