Boîte de dialogue d’alerte Android utilisant Kotlin
Dans ce tutoriel, nous allons discuter des dialogues d'alerte et les implémenter dans notre application Android en utilisant Kotlin.
Boîtes de dialogue d'alerte
Une boîte de dialogue d'alerte est une fenêtre qui apparaît à l'écran. Elle affiche généralement certaines informations et demande une action de l'utilisateur. Il y a trois composants principaux qui constituent une boîte de dialogue d'alerte.
- Texte du titre
- Texte du message
- Boutons - Il existe trois types de boutons : positifs, négatifs et neutres
Pour créer un AlertDialog, nous utilisons la classe interne AlertDialog.Builder.
val alertDialogBuilder = AlertDialog.Builder(this)Nous passons le contexte à l'intérieur du constructeur. Facultativement, nous pouvons passer un autre paramètre, le style de la boîte de dialogue d'alerte.
Méthodes de dialogue d'alerte
Certaines des méthodes qui peuvent être utilisées sur un AlertDialog.
- définirTitre
- définirMessage
- définirIcône
- setCustomTitle - Ici, vous pouvez passer une vue personnalisée qui sera placée à la place de la partie titre dans la boîte de dialogue d'alerte.
- setPositiveButton - Nous passons ici le nom de la chaîne, ainsi que le bouton, et la méthode de rappel du clic.
- setView - utilisé pour ajouter une vue personnalisée à l'intérieur de la boîte de dialogue d'alerte.
- setList - utilisé pour définir un tableau de chaînes qui serait affiché sous forme de liste.
- setMultiChoiceList - encore une fois nous pouvons définir un tableau, mais cette fois nous pouvons sélectionner plusieurs éléments de la liste grâce à la case à cocher.
- setPositiveButtonIcon - définir une icône à côté du Bouton
- show() - utilisé pour afficher l'AlertDialog
- setDismissListener - À l'intérieur de ceci, vous pouvez définir la logique à déclencher lorsque la boîte de dialogue d'alerte est fermée.
- setShowListener - définir la logique à déclencher lorsque la boîte de dialogue d'alerte est fermée.
- setCancelable - nécessite une valeur booléenne. Par défaut, toutes les boîtes de dialogue d'alerte peuvent être annulées en cliquant sur un bouton ou en touchant à l'extérieur. Si cette méthode est définie sur false, vous devez annuler explicitement la boîte de dialogue en utilisant la méthode dialog.cancel().
Code Kotlin de boîte de dialogue d'alerte
Pour utiliser AlertDialog dans votre projet Android Studio, importez la classe suivante.
import android.support.v7.app.AlertDialog;Le code Kotlin suivant est utilisé pour créer une simple boîte de dialogue d'alerte.
val builder = AlertDialog.Builder(this)
builder.setTitle("Androidly Alert")
builder.setMessage("We have a message")
//builder.setPositiveButton("OK", DialogInterface.OnClickListener(function = x))
builder.setPositiveButton(android.R.string.yes) { dialog, which ->
Toast.makeText(applicationContext,
android.R.string.yes, Toast.LENGTH_SHORT).show()
}
builder.setNegativeButton(android.R.string.no) { dialog, which ->
Toast.makeText(applicationContext,
android.R.string.no, Toast.LENGTH_SHORT).show()
}
builder.setNeutralButton("Maybe") { dialog, which ->
Toast.makeText(applicationContext,
"Maybe", Toast.LENGTH_SHORT).show()
}
builder.show()Le builder.show() affiche l'Alert Dialog à l'écran. À l'intérieur de la fonction setPositiveButton, nous passons le texte du bouton ainsi qu'une fonction Kotlin qui est déclenchée lorsque ce bouton est cliqué. La fonction fait partie de l'interface DialogInterface.OnClickListener(). Le type de la fonction est (DialogInterface, Int) -> Unit. DialogInterface est une instance du Dialog et Int est l'identifiant du bouton qui est cliqué. Dans le code ci-dessus, nous avons représenté cette fonction comme une fonction Kotlin d'ordre supérieur. dialog et which représentent les deux arguments. Nous pouvons améliorer la fonction en passant _ si les arguments ne sont pas utilisés. Les fonctions ressembleraient à ceci :
builder.setPositiveButton(android.R.string.yes) { _,_ ->
Toast.makeText(applicationContext,
android.R.string.yes, Toast.LENGTH_SHORT).show()
}Alternativement, nous pouvons également afficher le Dialogue via une instance de la classe AlertDialog. Remplacez builder.show() par :
val alertDialog = builder.create()
alertDialog.show()Au lieu de définir les fonctions de gestion des clics pour chacun des boutons, nous pouvons définir les fonctions d'ordre supérieur séparément également.
val positiveButtonClick = { dialog: DialogInterface, which: Int ->
Toast.makeText(applicationContext,
android.R.string.no, Toast.LENGTH_SHORT).show()
}Maintenant, définissez cette propriété val à l'intérieur de la fonction Kotlin setPositiveButton comme suit :
builder.setPositiveButton("OK", DialogInterface.OnClickListener(function = positiveButtonClick))
//or
builder.setPositiveButton(android.R.string.yes, positiveButtonClick)Cette dernière rend le code beaucoup plus concis. Voici une capture d'écran de notre classe Activity avec la fonction ci-dessus appliquée à chacun des Boutons.
Vous pouvez passer un null au lieu de la fonction si vous n'avez pas l'intention de conserver une action lors du clic sur le bouton.
Kotlin a encore plus de pouvoir pour améliorer la lisibilité du code ci-dessus.
Code Kotlin pour une boîte de dialogue d'alerte simple
En utilisant la fonction with, nous pouvons améliorer la lisibilité du code Kotlin pour créer une boîte de dialogue d'alerte.
fun basicAlert(view: View){
val builder = AlertDialog.Builder(this)
with(builder)
{
setTitle("Androidly Alert")
setMessage("We have a message")
setPositiveButton("OK", DialogInterface.OnClickListener(function = positiveButtonClick))
setNegativeButton(android.R.string.no, negativeButtonClick)
setNeutralButton("Maybe", neutralButtonClick)
show()
}
}Dans la section suivante, nous allons créer notre application Android où nous mettrons en œuvre les fonctionnalités suivantes dans notre AlertDialog.
- Dialogue d'alerte simple
- Dialogue d'alerte avec personnalisation d'icône et de bouton
- Boîte de dialogue d'alerte avec liste
- Boîte de dialogue d'alerte avec liste à choix multiple
- Boîte de dialogue d'alerte avec style
- Boîte de dialogue d'alerte avec style personnalisé
- Boîte de dialogue d'alerte avec EditText
Structure du projet Android Studio
1. Code de mise en page XML
Le code pour la 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:gravity="center"
android:orientation="vertical"
tools:context=".MainActivity">
<Button
android:id="@+id/btnBasicAlert"
android:layout_width="wrap_content"
android:onClick="basicAlert"
android:layout_height="wrap_content"
android:text="BASIC ALERT DIALOG" />
<Button
android:id="@+id/btnAlertWithIconsAndCustomize"
android:layout_width="wrap_content"
android:onClick="withIconAndCustomise"
android:layout_height="wrap_content"
android:text="WITH ICON AND CUSTOMIZATION" />
<Button
android:id="@+id/btnAlertWithItems"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="withItems"
android:text="WITH ITEMS" />
<Button
android:id="@+id/btnAlertWithMultiChoiceList"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="withMultiChoiceList"
android:text="WITH MULTI CHOICE LIST" />
<Button
android:id="@+id/btnAlertWithStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="withStyle"
android:text="WITH STYLE" />
<Button
android:id="@+id/btnAlertWithCustomStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="withCustomStyle"
android:text="WITH CUSTOM STYLE" />
<Button
android:id="@+id/btnAlertWithButtonCentered"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="withButtonCentered"
android:text="WITH BUTTON CENTERED" />
<Button
android:id="@+id/btnAlertWithEditText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="withEditText"
android:text="WITH EDIT TEXT" />
</LinearLayout>Pour chacun des boutons, nous avons défini un attribut android:onClick avec le nom de la fonction. Ces fonctions Kotlin seraient déclenchées dans la classe MainActivity.kt. Nous en discuterons une par une.
2. Code de l'activité principale Kotlin
Nous avons déjà créé la première boîte de dialogue d'alerte ci-dessus. Voyons à quoi ressemble MainActivity.kt avec elle.
package net.androidly.androidlyalertdialog
import android.content.DialogInterface
import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import android.support.v7.app.AlertDialog
import android.view.View
import android.widget.Toast
class MainActivity : AppCompatActivity() {
val positiveButtonClick = { dialog: DialogInterface, which: Int ->
Toast.makeText(applicationContext,
android.R.string.yes, Toast.LENGTH_SHORT).show()
}
val negativeButtonClick = { dialog: DialogInterface, which: Int ->
Toast.makeText(applicationContext,
android.R.string.no, Toast.LENGTH_SHORT).show()
}
val neutralButtonClick = { dialog: DialogInterface, which: Int ->
Toast.makeText(applicationContext,
"Maybe", Toast.LENGTH_SHORT).show()
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
}
fun basicAlert(view: View){
val builder = AlertDialog.Builder(this)
with(builder)
{
setTitle("Androidly Alert")
setMessage("We have a message")
setPositiveButton("OK", DialogInterface.OnClickListener(function = positiveButtonClick))
setNegativeButton(android.R.string.no, negativeButtonClick)
setNeutralButton("Maybe", neutralButtonClick)
show()
}
}
}3. Boîte de dialogue d'alerte avec icônes et personnalisation
val builder = AlertDialog.Builder(this)
with(builder) {
setTitle("Icon and Button Color")
setMessage("We have a message")
setPositiveButton("OK", null)
setNegativeButton("CANCEL", null)
setNeutralButton("NEUTRAL", null)
setPositiveButtonIcon(resources.getDrawable(android.R.drawable.ic_menu_call, theme))
setIcon(resources.getDrawable(android.R.drawable.ic_dialog_alert, theme))
}
val alertDialog = builder.create()
alertDialog.show()
val button = alertDialog.getButton(DialogInterface.BUTTON_POSITIVE)
with(button) {
setBackgroundColor(Color.BLACK)
setPadding(0, 0, 20, 0)
setTextColor(Color.WHITE)
}En utilisant le getButton, nous pouvons récupérer n'importe lequel des boutons en réglant leur constante respective. Une fois le bouton récupéré, nous pouvons le personnaliser comme indiqué ci-dessus.
4. Boîte de dialogue d'alerte avec des éléments
fun withItems(view: View) {
val items = arrayOf("Red", "Orange", "Yellow", "Blue")
val builder = AlertDialog.Builder(this)
with(builder)
{
setTitle("List of Items")
setItems(items) { dialog, which ->
Toast.makeText(applicationContext, items[which] + " is clicked", Toast.LENGTH_SHORT).show()
}
setPositiveButton("OK", positiveButtonClick)
show()
}
}À l'intérieur de setItems, nous passons le tableau Kotlin. L'argument which représente l'indice de l'élément cliqué dans la liste.
5. Boîte de dialogue d'alerte avec liste à choix multiples
fun withMultiChoiceList(view: View) {
val items = arrayOf("Microsoft", "Apple", "Amazon", "Google")
val selectedList = ArrayList<Int>()
val builder = AlertDialog.Builder(this)
builder.setTitle("This is list choice dialog box")
builder.setMultiChoiceItems(items, null
) { dialog, which, isChecked ->
if (isChecked) {
selectedList.add(which)
} else if (selectedList.contains(which)) {
selectedList.remove(Integer.valueOf(which))
}
}
builder.setPositiveButton("DONE") { dialogInterface, i ->
val selectedStrings = ArrayList<string>()
for (j in selectedList.indices) {
selectedStrings.add(items[selectedList[j]])
}
Toast.makeText(applicationContext, "Items selected are: " + Arrays.toString(selectedStrings.toTypedArray()), Toast.LENGTH_SHORT).show()
}
builder.show()
}Dans le code ci-dessus, nous sauvegardons les choix dans une liste de tableaux d'entiers et les récupérons à nouveau pour les afficher dans le message Toast.
6. Boîte de dialogue d'alerte avec style
fun withStyle(view: View) {
val builder = AlertDialog.Builder(ContextThemeWrapper(this, android.R.style.Holo_SegmentedButton))
with(builder)
{
setTitle("Androidly Alert")
setMessage("We have a message")
setPositiveButton("OK", DialogInterface.OnClickListener(function = positiveButtonClick))
setNegativeButton(android.R.string.no, negativeButtonClick)
setNeutralButton("Maybe", neutralButtonClick)
show()
}
}
Si vous n'utilisez pas ContextThemeWrapper, la boîte de dialogue d'alerte s'affichera en plein écran.
7. Dialogue d'alerte avec style personnalisé
Ajoutez le code suivant dans le fichier styles.xml :
<style name="AlertDialogCustom" parent="@android:style/Theme.Material.Dialog">
<item name="android:textColor">@android:color/white</item>
<item name="android:textStyle">bold</item>
<item name="android:headerDividersEnabled">true</item>
<item name="android:background">@android:color/holo_blue_dark</item>
</style>Voici la fonction Kotlin :
fun withCustomStyle(view: View) {
val builder = AlertDialog.Builder(ContextThemeWrapper(this, R.style.AlertDialogCustom))
with(builder)
{
setTitle("Androidly Alert")
setMessage("We have a message")
setPositiveButton("OK", DialogInterface.OnClickListener(function = positiveButtonClick))
setNegativeButton(android.R.string.no, negativeButtonClick)
setNeutralButton("Maybe", neutralButtonClick)
show()
}
}8. Boîte de dialogue d'alerte avec bouton centré
fun withButtonCentered(view: View) {
val alertDialog = AlertDialog.Builder(this).create()
alertDialog.setTitle("Title")
alertDialog.setMessage("Message")
alertDialog.setButton(AlertDialog.BUTTON_POSITIVE, "Yes"
) { dialog, which -> dialog.dismiss() }
alertDialog.setButton(AlertDialog.BUTTON_NEGATIVE, "No"
) { dialog, which -> dialog.dismiss() }
alertDialog.show()
val btnPositive = alertDialog.getButton(AlertDialog.BUTTON_POSITIVE)
val btnNegative = alertDialog.getButton(AlertDialog.BUTTON_NEGATIVE)
val layoutParams = btnPositive.layoutParams as LinearLayout.LayoutParams
layoutParams.weight = 10f
btnPositive.layoutParams = layoutParams
btnNegative.layoutParams = layoutParams
}9. Boîte de dialogue d'alerte avec champ de texte modifiable
Le code pour la mise en page personnalisée alert_dialog_with_edittext.xml est donné ci-dessous :
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<EditText
android:id="@+id/editText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Enter the text here"/>
</LinearLayout>fun withEditText(view: View) {
val builder = AlertDialog.Builder(this)
val inflater = layoutInflater
builder.setTitle("With EditText")
val dialogLayout = inflater.inflate(R.layout.alert_dialog_with_edittext, null)
val editText = dialogLayout.findViewById<EditText>(R.id.editText)
builder.setView(dialogLayout)
builder.setPositiveButton("OK") { dialogInterface, i -> Toast.makeText(applicationContext, "EditText is " + editText.text.toString(), Toast.LENGTH_SHORT).show() }
builder.show()
}La sortie de l'application ci-dessus est donnée ci-dessous :
Télécharger le projet Android Studio : AndroidlyAlertDialog



