Así podrás crear y personalizar un spinner en Android (Java)

En muchos casos, crear un spinner es una buena solución para una app Android, cómo cuando necesitamos crear un desplegable con múltiples opciones, sin tener que ocupar mucho espacio y hacerlo de una manera ordenada y estética. Este es un widget que es muy fácil de crear, pero que requiere de varios pasos para su configuración.

Aquí te explico una forma simple de hacerlo con Java y agregando algunas modificaciones estéticas básicas, para que el resultado en tu app Android sea lo mejor posible.

Así podrás crear y personalizar un spinner en Android (Java)

Pasos para crear un Spinner en una app Android

Lo primero que debes hacer, es lo que hacemos al agregar widgets en una app Android creada con Java, agregar el elemento al apartado xml donde queremos que aparezca, ya sea una activity o un fragment. Para eso tenemos la opción de poner el editor en modo diseño y, arrastrarlo a la pantalla o, copiar directamente el código del elemento, lo que variará de acuerdo al layout que estemos un usando, un ejemplo es el siguiente:


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

Esto el código básico, luego se le pueden agregar elementos como algunos márgenes para mejorar su visualización dentro de la pantalla; también agregar un tema, para que se vea mejor y algunos colores para el texto. En el siguiente código, se ve un spinner acomodado con respecto a los otros elementos, en un Relative Layout y con un tema para mejorar su estética


<Spinner
        android:id="@+id/yearSpinner"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@id/otroElemento"
        android:layout_centerHorizontal="true"
        android:textAlignment="center"
        android:overlapAnchor="false"
        android:layout_marginHorizontal="30dp"
        android:backgroundTint="@color/blue"
        android:theme="@android:style/Theme.Holo.Light.DarkActionBar"
        android:layout_marginTop="30dp"/>

Crear un Array con los datos que tendrá el Spinner

El segundo gran paso es crear un arreglo, con las palabras que van a aparecer al desplegar el spinner. Para eso, tendremos que irnos a la carpeta Res, luego a Values y luego a Strings y ahí crear el array, que para una lista de años se vería de la siguiente manera.


<string-array name="spinner_items">
    <item>2024</item>
    <item>2023</item>
    <item>2022</item>
    <!--Agrega más elementos si es necesario-->
</string-array>

Configurar el adaptador del Spinner dentro del código Java

El tercer paso, es agregar el spinner al código Java de nuestra aplicación Android, para que no sólo se muestre, sino también pueda cumplir una función más, como, por ejemplo, mostrar algún contenido, con cada selección que haga el usuario.

Lo primero sería crear una variable de instancia para que el Spinner siempre muestre un ítem y permita hacer otros cálculos con el valor del mismo, para eso, lo que debemos hacer es colocar justo debajo del título de la Activity o del Fragment, dicha variable, por ejemplo:

private int selectedYear = 2024;

Luego podemos agregar dentro del código principal de nuestra Activity o Fragment, el siguiente código:


//Conecta con el elemento xml
Spinner spinner = findViewById(R.id.spinner);
//Crea el adaptador y lo une al array
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this,
        R.array.spinner_items, android.R.layout.simple_spinner_item);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
//Une el spinner y el adaptador
spinner.setAdapter(adapter);

Debajo de este código podemos agregar el bloque encargado de escuchar los elementos de selección dentro del spinner. Eso lo podemos hacer agregando lo siguiente:


yearSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView parent, View view, int position, long id) {
                String selectedYearString = (String) parent.getItemAtPosition(position);
			//De aquí en adelante, el código varía de acuerdo a la necesidad
            //Lo siguiente lo coloque para seguir con ejemplo de la lista de años
            //usando la valriable de instancia creada
            selectedYear = Integer.parseInt(selectedYearString);
            }
            @Override
            public void onNothingSelected(AdapterView parent) {
			// Se llama cuando no se ha seleccionado ningún elemento (opcional)
            }
        });

Adicional a esto, podemos agregar un switch case para que con cada selección dentro del spinner, la app muestre un valor o, lo tenga en cuenta para otras operaciones. Un ejemplo, sería definir un valor monetario para cada año y, que la app pueda hacer un cálculo, teniendo en cuenta ese valor y las unidades dadas por el usuario. Quedaría de la siguiente manera:


  private double getValueForYear(int year) {
        // Aquí deberías tener tus valores predefinidos para cada año
        // Puedes implementar un switch o un if-else 
        // Devuelve el valor correspondiente al año dado
       switch (year) {
            case 2024:
                return 47065.0;
            case 2023:
                return 42412.0;
            case 2022:
                return 38004.0;            
            // Agrega más casos según tus necesidades
            default:
//Aquí va el valor que corresponde a 2024, ya que lo hemos definido como slección por defecto		
                return 47065.0;
        }
    }

Ya con esto, puedes emplear uno o varios métodos, que tomen el valor del espinner, se lo pasen al switch y hacer las operaciones que consideres necesarias para tu app Android.

Siguiente Anterior