Así podrás crear y personalizar un spinner en Android (Java)
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.
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.