Ajouter des icônes de chargement à votre application

Les icônes de chargement permettent de sélectionner rapidement une valeur dans un ensemble. Dans l'état par défaut, une icône de chargement affiche la valeur actuellement sélectionnée. Lorsque l'utilisateur appuie sur l'icône de chargement, un menu affiche toutes les autres valeurs que l'utilisateur peut sélectionner.

Figure 1. Menu d'une icône de chargement affichant les valeurs disponibles.

Vous pouvez ajouter une icône de chargement à votre mise en page avec l'objet Spinner, ce que vous faites généralement dans votre mise en page XML avec un élément <Spinner>. Ce processus est illustré dans l'exemple suivant:

<Spinner
    android:id="@+id/planets_spinner"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" />

Pour remplir la roue de sélection des couleurs avec une liste d'options, spécifiez un SpinnerAdapter dans votre code source Activity ou Fragment.

Si vous utilisez des composants Material Design, les menus déroulants exposés correspondent à un Spinner.

Insérer les choix de l'utilisateur dans l'icône de chargement

Les choix que vous fournissez pour la roue de sélection des couleurs peuvent provenir de n'importe quelle source, mais vous devez les fournir via un SpinnerAdapter, tel qu'un ArrayAdapter si les choix sont disponibles dans un tableau ou un CursorAdapter s'ils sont disponibles à partir d'une requête de base de données.

Par exemple, si les choix disponibles pour votre roue de sélection des couleurs sont prédéterminés, vous pouvez leur fournir un tableau de chaînes défini dans un fichier de ressources de chaîne:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string-array name="planets_array">
        <item>Mercury</item>
        <item>Venus</item>
        <item>Earth</item>
        <item>Mars</item>
        <item>Jupiter</item>
        <item>Saturn</item>
        <item>Uranus</item>
        <item>Neptune</item>
    </string-array>
</resources>

Avec un tableau comme celui-ci, vous pouvez utiliser le code suivant dans votre Activity ou Fragment pour fournir à la roue de sélection des couleurs le tableau à l'aide d'une instance de ArrayAdapter:

Kotlin

val spinner: Spinner = findViewById(R.id.planets_spinner)
// Create an ArrayAdapter using the string array and a default spinner layout.
ArrayAdapter.createFromResource(
        this,
        R.array.planets_array,
        android.R.layout.simple_spinner_item
).also { adapter ->
    // Specify the layout to use when the list of choices appears.
    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
    // Apply the adapter to the spinner.
    spinner.adapter = adapter
}

Java

Spinner spinner = (Spinner) findViewById(R.id.planets_spinner);
// Create an ArrayAdapter using the string array and a default spinner layout.
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(
        this,
        R.array.planets_array,
        android.R.layout.simple_spinner_item
);
// Specify the layout to use when the list of choices appears.
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
// Apply the adapter to the spinner.
spinner.setAdapter(adapter);

La méthode createFromResource() vous permet de créer une ArrayAdapter à partir du tableau de chaînes. Le troisième argument de cette méthode est une ressource de mise en page qui définit la manière dont le choix sélectionné apparaît dans la commande de chargement. La plate-forme fournit la mise en page simple_spinner_item. Il s'agit de la mise en page par défaut, sauf si vous souhaitez définir votre propre mise en page pour l'apparence de la roue de sélection des couleurs.

Appelez setDropDownViewResource(int) pour spécifier la mise en page utilisée par l'adaptateur pour afficher la liste des options de roue de sélection des couleurs. simple_spinner_dropdown_item est une autre mise en page standard définie par la plate-forme.

Appelez setAdapter() pour appliquer l'adaptateur à votre Spinner.

Répondre aux sélections des utilisateurs

Lorsque l'utilisateur sélectionne un élément dans le menu de la roue de sélection des couleurs, l'objet Spinner reçoit un événement sélectionné au niveau de l'élément.

Pour définir le gestionnaire d'événements de sélection pour une icône de chargement, implémentez l'interface AdapterView.OnItemSelectedListener et la méthode de rappel onItemSelected() correspondante. Par exemple, voici une implémentation de l'interface dans un élément Activity:

Kotlin

class SpinnerActivity : Activity(), AdapterView.OnItemSelectedListener {
    ...
    override fun onItemSelected(parent: AdapterView<*>, view: View?, pos: Int, id: Long) {
        // An item is selected. You can retrieve the selected item using
        // parent.getItemAtPosition(pos).
    }

    override fun onNothingSelected(parent: AdapterView<*>) {
        // Another interface callback.
    }
}

Java

public class SpinnerActivity extends Activity implements OnItemSelectedListener {
    ...
    public void onItemSelected(AdapterView<?> parent, View view,
            int pos, long id) {
        // An item is selected. You can retrieve the selected item using
        // parent.getItemAtPosition(pos).
    }

    public void onNothingSelected(AdapterView<?> parent) {
        // Another interface callback.
    }
}

L'interface AdapterView.OnItemSelectedListener nécessite les méthodes de rappel onItemSelected() et onNothingSelected().

Spécifiez l'implémentation de l'interface en appelant setOnItemSelectedListener():

Kotlin

val spinner: Spinner = findViewById(R.id.planets_spinner)
spinner.onItemSelectedListener = this

Java

Spinner spinner = (Spinner) findViewById(R.id.planets_spinner);
spinner.setOnItemSelectedListener(this);

Si vous implémentez l'interface AdapterView.OnItemSelectedListener avec votre Activity ou votre Fragment, comme dans l'exemple précédent, vous pouvez transmettre this en tant qu'instance d'interface.