Dans ce tutoriel, nous discuterons et mettrons en œuvre des spinners dans notre application Android en utilisant Kotlin. Android Spinner est utilisé pour créer une liste déroulante à l’écran.
Que allez-vous apprendre ?
- Création de spinners via XML et de manière programmatique
- Définition d’un indicateur sur le Spinner.
- Création d’une mise en page personnalisée pour le Spinner.
- Gestion des écouteurs de clic et affichage d’un message Toast.
- Empêcher l’écouteur de clic d’être déclenché automatiquement la première fois.
Qu’est-ce qu’un Android Spinner ?
Les spinners sont comme un menu déroulant qui contient une liste d’éléments à sélectionner. Une fois une valeur sélectionnée, le Spinner retourne à son état par défaut avec cette valeur sélectionnée. Après Android 3.0, il n’est pas possible d’afficher un message d’invite dans un Spinner comme état par défaut. À la place, le premier élément est affiché. Les données à l’intérieur d’un spinner sont chargées avec un adaptateur. Prenons le scénario suivant : imaginez que vous devez charger votre téléphone. Pour cela, vous devez connecter votre chargeur de téléphone à la prise électrique à l’aide d’une broche (adaptateur). Ensuite, l’adaptateur fournit de l’électricité à votre téléphone. Dans Android, le Spinner est comme votre téléphone qui est chargé de données à l’aide d’un \texttt{Adaptateur}. L’adaptateur définit les données ainsi que la mise en page pour les éléments à charger dans le Spinner. \texttt{
Événements de rappel du Spinner
AdapterView.onItemSelectedListener
} est utilisée pour déclencher les rappels d’événements de clic du Spinner. Il se compose de deux méthodes : \texttt{
- onItemSelected
- onNothingSelected
}. Dans la section suivante, nous créerons un nouveau projet Android Studio et mettrons en œuvre des Spinners dans notre application. Nous personnaliserons les mises en page et apprendrons à gérer différentes situations. \texttt{
Projet Android Spinner en Kotlin }
1. Code de la mise en page XML
Le code du fichier de mise en page activity_main.xml est donné ci-dessous.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:id="@+id/linearLayout"
android:gravity="center"
tools:context=".MainActivity">
<Spinner
android:id="@+id/mySpinner"
android:layout_width="match_parent"
android:spinnerMode="dialog"
android:layout_height="wrap_content" />
</LinearLayout>
Il héberge actuellement un seul Spinner android:spinnerMode peut être soit dialogue
soit déroulant
.
Pour afficher des invites, vous devriez utiliser le mode dialogue comme valeur de spinnerMode
.
2. Code XML du Spinner
Le code pour spinner_right_aligned.xml
est donné ci-dessous.
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/textView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="end"
android:padding="15dp"
android:textAlignment="gravity"
android:textColor="@color/colorPrimary"
android:textSize="16sp"
/>
3. Code Kotlin de MainActivity
Le code de la classe MainActivity.kt est donné ci-dessous.
package net.androidly.androidspinnerkotlin
import android.content.Context
import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import android.view.Gravity
import android.view.View
import android.widget.*
import kotlinx.android.synthetic.main.activity_main.*
class MainActivity : AppCompatActivity(), AdapterView.OnItemSelectedListener {
var languages = arrayOf("Java", "PHP", "Kotlin", "Javascript", "Python", "Swift")
val NEW_SPINNER_ID = 1
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
var aa = ArrayAdapter(this, android.R.layout.simple_spinner_item, languages)
aa.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
with(mySpinner)
{
adapter = aa
setSelection(0, false)
onItemSelectedListener = this@MainActivity
prompt = "Select your favourite language"
gravity = Gravity.CENTER
}
val spinner = Spinner(this)
spinner.id = NEW_SPINNER_ID
val ll = LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT)
ll.setMargins(10, 40, 10, 10)
linearLayout.addView(spinner)
aa = ArrayAdapter(this, R.layout.spinner_right_aligned, languages)
aa.setDropDownViewResource(R.layout.spinner_right_aligned)
with(spinner)
{
adapter = aa
setSelection(0, false)
onItemSelectedListener = this@MainActivity
layoutParams = ll
prompt = "Select your favourite language"
setPopupBackgroundResource(R.color.material_grey_600)
}
}
override fun onNothingSelected(parent: AdapterView<*>?) {
showToast(message = "Nothing selected")
}
override fun onItemSelected(parent: AdapterView<*>?, view: View?, position: Int, id: Long) {
when (view?.id) {
1 -> showToast(message = "Spinner 2 Position:${position} and language: ${languages[position]}")
else -> {
showToast(message = "Spinner 1 Position:${position} and language: ${languages[position]}")
}
}
}
private fun showToast(context: Context = applicationContext, message: String, duration: Int = Toast.LENGTH_LONG) {
Toast.makeText(context, message, duration).show()
}
}
Points importants:
- Grâce aux extensions Kotlin pour Android, le widget Spinner XML est automatiquement disponible dans notre classe d’activité Kotlin.
- Nous avons créé un
arrayOf
de chaînes qui consiste en des langages de programmation. Ceux-ci sont remplis dans l’adaptateur en utilisant ArrayAdapter. - La méthode
setDropDownViewResource
est utilisée pour définir la mise en page pour l’état sélectionné et les lignes de liste du spinner. - Le
android.R.layout.simple_spinner_item
est utilisé pour définir la mise en page par défaut du SDK Android. Par défaut, le TextView est aligné à gauche dans ce type de mise en page.
Nous avons créé un deuxième Spinner de manière programmatique qui charge les mises en page à partir du fichier spinner_right_aligned.xml
.
La méthode setSelection(0, false)
est utilisée pour empêcher les méthodes OnItemSelected du Spinner de s’exécuter lorsque l’activité est créée.
Comment ça marche? La méthode setSelection() indique à l’activité que le premier élément du spinner a déjà été sélectionné. Nous devons placer cette instruction avant onItemSelectedListener = this
. La méthode setPopupBackgroundResource
est utilisée pour définir la couleur de fond de la liste déroulante. À l’intérieur de la fonction onItemSelected
, nous utilisons l’instruction when pour déclencher un Toast pour l’élément Spinner respectif. Grâce à Kotlin et aux fonctions avec des valeurs par défaut, nous avons réduit l’appel verbeux au Toast.
4. Sortie de l’application Spinner Kotlin
Voici la sortie lorsque l’application ci-dessus a été exécutée sur un émulateur. Vous pouvez télécharger le code source du projet ci-dessus à partir du lien ci-dessous. AndroidSpinnerKotlin
Source:
https://www.digitalocean.com/community/tutorials/android-spinner-using-kotlin