web-dev-qa-db-fra.com

Kotlin crée un snack-bar

Nous essayons de créer une Snackbar. Le code d'une application Java a été converti à l'aide du convertisseur Java vers Kotlin dans Android Studio. Ensuite, nous avons examiné divers exemples sur de nombreux sites Web différents et même essayé d'implémenter le code du livre Kotlin Programming Cookbook. Nous publierons tous nos exemples non fonctionnels ci-dessous. Notre question est de savoir comment créer la syntaxe appropriée pour afficher une Snackbar? Nous aimerions cliquer sur un btnSNACK avec un onClick = onSNACK pour afficher la Snackbar

Ceci est notre Java en code convertisseur Kotlin, nous aimerions vraiment utiliser celui-ci

    fun onSNACK(view: View){
    //Snackbar(view)
    //val snackbar = Snackbar(view, "Permission Granted", Snackbar.LENGTH_LONG).setAction("Action", null).show()
        snackbar.make(view, "Replace with your own action", 
        snackbar.LENGTH_LONG).setAction("Action", null).show()    
        snackbar.setActionTextColor(Color.BLUE)
        val snackbarView = snackbar.getView()
        snackbarView.setBackgroundColor(Color.LTGRAY)
        val textView = 
        snackbarView.findViewById(Android.support.design.R.id.snackbar_text)
        textView.setTextColor(Color.BLUE)
        textView.setTextSize(28f)
        snackbar.show()
}

L'essai suivant était avec ce code

    class Snackbar{
    object LENGTH_LONG {
    }
    fun show() {
    }
}

fun onSNACK(view: View){
    snackbar = Snackbar.make(this, "Welcome to Android Teachers..!!", 
    Snackbar.LENGTH_LONG)
    snackbar.show()
}

Notre disposition est un RelativeLayout (RL) pour l'activité qui a la Snackbar

    class Snackbar(view: View?): Any() {
    object LENGTH_SHORT {}

fun View.snack(message: String, length: Int = Toast.LENGTH_LONG, f: Snackbar. 
() -> Unit) {
    val snack = Snackbar.make(this.findViewById(R.id.RL), message, length)
    snack.f()
    snack.show()
}

Nous pensions que cela fonctionnerait, la première ligne de code a été déclarée de haut niveau

    lateinit var snackbar: Snackbar//top level
fun onSNACK(){
    btnSNACK.setOnClickListener { view ->
        Snackbar.make(view, "Replace with your own action", 
        Snackbar.LENGTH_LONG)
                .setAction("Action", null).show()
    }
}

Nous avons utilisé la classe Snackbar avec et sans ces différentes méthodes. Nous avons pu supprimer tous les avertissements rouges dans la plupart de ces exemples, mais le travail "make" propose simplement la même suggestion "change variable name", ce qui n'a aucun sens de notre point de vue novice Kotlin. Nous ne souhaitons pas utiliser le plugin Anko Nous ne voyons pas non plus d'importations se référant à Snackbar Oui, nous avons la dépendance Jetbrains stdlib v7 pas de dépendance de conception

5
Vector

Si quelqu'un n'a pas besoin de trop le personnaliser, vous pouvez l'utiliser directement, comme suit:

view.snack("Your message")

Pour ce faire, il suffit de définir une fonction d'extension (de préférence dans un fichier séparé ):

fun View.snack(message: String, duration: Int = Snackbar.LENGTH_LONG) {
    Snackbar.make(this, message, duration).show()
}
1
JCarlosR