Cómo agregar íconos giratorios a tu app

Los controles de números ofrecen una manera rápida de seleccionar un valor de un conjunto. En la configuración predeterminada , un control de números muestra su valor actualmente seleccionado. Presionar el ícono giratorio muestra un menú en el que se muestran todos los demás valores que el usuario puede seleccionar.

Figura 1: Menú de un ícono giratorio que muestra los de salida.

Puedes agregar un control de número a tu diseño con la Spinner objeto, algo que generalmente haces en tu diseño XML con una elemento <Spinner>. Esto se muestra en el siguiente ejemplo:

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

Para rellenar el ícono giratorio con una lista de opciones, especifica una SpinnerAdapter en tu Activity o Fragment código fuente.

Si usas componentes de Material Design, expuesto los menús desplegables son equivalentes a Spinner.

Cómo completar el ícono giratorio con las selecciones del usuario

Las opciones que proporciones para el control de números pueden provenir de cualquier fuente, pero debes proporcionarlos a través de un SpinnerAdapter, como un ArrayAdapter si las opciones están disponibles en una matriz o en una CursorAdapter si las opciones están disponibles a partir de una consulta en la base de datos.

Por ejemplo, si las opciones disponibles para tu ícono giratorio son predeterminadas, puedes proporcionarles un array de cadenas definido en un recurso de cadenas :

<?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>

Con un array como este, puedes usar el siguiente código en tu Activity o Fragment para proporcionar al ícono giratorio el valor array con una instancia 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);

El createFromResource() te permite crear un ArrayAdapter a partir del array de cadenas. El El tercer argumento para este método es un recurso de diseño que define cómo se la opción seleccionada aparecerá en el control del ícono giratorio. La plataforma proporciona la simple_spinner_item . Este es el diseño predeterminado, a menos que desees definir tu propio diseño para la apariencia del ícono giratorio.

Llamada setDropDownViewResource(int) a fin de especificar el diseño que usa el adaptador para mostrar la lista de opciones del ícono giratorio. simple_spinner_dropdown_item es otro diseño estándar definido por la plataforma.

Llamada setAdapter() para aplicar el adaptador a tu Spinner.

Cómo responder a las selecciones de los usuarios

Cuando el usuario selecciona un elemento del menú del ícono giratorio, el Spinner objeto recibe un evento en relación con el elemento seleccionado.

Para definir el controlador del evento de selección para un control de número, implementa la AdapterView.OnItemSelectedListener interfaz de usuario y la correspondiente onItemSelected() de devolución de llamada. Por ejemplo, esta es una implementación de la interfaz en una 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.
    }
}

El La interfaz AdapterView.OnItemSelectedListener requiere la onItemSelected() y onNothingSelected() de devolución de llamada.

Llama para especificar la implementación de la interfaz 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 implementas AdapterView.OnItemSelectedListener interfaz con tu Activity o Fragment, como en el ejemplo anterior, puedes pasar this como la instancia de la interfaz.