Cómo cambiar el color del texto en un Spinner para Android en Kotlin


Apuntes de personalización de un Spinner elemento visual para mostrar selector de lista

Cambiar el tamaño del texto o el color de un Spinner no es tan simple como usar el atributo android:textSize o android:textColor en el elemento Spinner.

Se requiere de crear recursos separados uno para el texto selecionado del spinner y el otro de los elementos de la lista de selección.

Definir el Spinner

<androidx.appcompat.widget.AppCompatSpinner
    android:id="@+id/spinner_view"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginTop="16dp"
    android:entries="@array/animals"
    android:backgroundTint="#FF0000" />

Datos de muestra un array.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string-array name="animals">
        <item>Dog</item>
        <item>Fish</item>
        <item>Horse</item>
        <item>Rabbit</item>
        <item>Parrot</item>
        <item>Pigeon</item>
        <item>Dck</item>
    </string-array>
</resources>

Personalizar texto del Spinner

Crear un recurso layout con nombre spinner_item.xml

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@android:id/text1"
    style="@style/Widget.AppCompat.TextView.SpinnerItem"
    android:layout_width="match_parent"
    android:layout_height="48dp"
    android:background="#fff9c4"
    android:ellipsize="end"
    android:gravity="center_vertical"
    android:lines="1"
    android:textColor="#00Ff00" />

Aquí se puede cambiar el color del texto con la propiedad android:textColor y como tambien el color del fondo con android:background

Personalizar texto de los candidatos

Crear un recurso layout con nombre spinner_dropdown_item.xml

<?xml version="1.0" encoding="utf-8"?>
<CheckedTextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@android:id/text1"
    style="?android:attr/spinnerDropDownItemStyle"
    android:maxLines="1"
    android:layout_width="match_parent"
    android:layout_height="48dp"
    android:ellipsize="marquee"
    android:textColor="#aa66cc"/>

Aquí se puede cambiar el color del texto con la propiedad android:textColor y como tambien el color del fondo con android:background, pero si se modificar el color del fondo se perderá el efecto ripple al seleccionar un item de la lista.

Personalizando el Spinner

val adapter: ArrayAdapter<*> = ArrayAdapter.createFromResource(
    requireContext(), R.array.animals, R.layout.spinner_item
)
adapter.setDropDownViewResource(R.layout.spinner_dropdown_item)
binding.spinnerView.adapter = adapter

Liinea 2 se asigna el layout del elemento del spinner y en la línea 4 se especifica el layout para los elementos seleccionables.

Demostración

Publicado por Webserveis

Desarrollador freelance programador apasionado por el arte de programar, amante del auto aprendizaje y interesado por la tecnología en general.

Deja una respuesta

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Salir /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Salir /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Salir /  Cambiar )

Conectando a %s

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

A %d blogueros les gusta esto: