¿Cómo creo ColorStateList mediante programación?

Resuelto Anukool asked hace 54 años • 9 respuestas

Estoy intentando crear ColorStateListprogramáticamente usando esto:

ColorStateList stateList = new ColorStateList(states, colors); 

Pero no estoy seguro de cuáles son los dos parámetros.

Según la documentación:

public ColorStateList (int[][] states, int[] colors) 

Agregado en API nivel 1

Crea una ColorStateList que devuelve la asignación especificada de estados a colores.

¿Alguien puede explicarme cómo crear esto?

¿Cuál es el significado de matriz bidimensional para estados?

Anukool avatar Jan 01 '70 08:01 Anukool
Aceptado

Consulte http://developer.android.com/reference/android/R.attr.html#state_above_anchor para obtener una lista de los estados disponibles.

Si desea establecer colores para estados deshabilitados, desenfocados, no marcados, etc., simplemente niegue los estados:

int[][] states = new int[][] {
    new int[] { android.R.attr.state_enabled}, // enabled
    new int[] {-android.R.attr.state_enabled}, // disabled
    new int[] {-android.R.attr.state_checked}, // unchecked
    new int[] { android.R.attr.state_pressed}  // pressed
};

int[] colors = new int[] {
    Color.BLACK,
    Color.RED,
    Color.GREEN,
    Color.BLUE
};

ColorStateList myList = new ColorStateList(states, colors);

Kotlin:

    val states = arrayOf(
        intArrayOf(android.R.attr.state_enabled), // enabled
        intArrayOf(-android.R.attr.state_enabled), // disabled
        intArrayOf(-android.R.attr.state_checked), // unchecked
        intArrayOf(android.R.attr.state_pressed)  // pressed
    )

    val colors = intArrayOf(
        Color.BLACK,
        Color.RED,
        Color.GREEN,
        Color.BLUE
    )

    val myList = ColorStateList(states, colors)
Caner avatar Jul 22 '2013 12:07 Caner

A veces esto sería suficiente:

int colorInt = getResources().getColor(R.color.ColorVerificaLunes);
ColorStateList csl = ColorStateList.valueOf(colorInt);

Kotlin:

val colorInt: Int = context.getColor(R.color.ColorVerificaLunes)
val csl = ColorStateList.valueOf(colorInt)
tse avatar Jun 06 '2017 03:06 tse

La primera dimensión es una matriz de conjuntos de estados, la segunda es el conjunto de estados en sí. La matriz de colores enumera los colores para cada conjunto de estados coincidentes, por lo tanto, la longitud de la matriz de colores tiene que coincidir con la primera dimensión de la matriz de estados (o fallará cuando el estado esté "usado"). Aquí y ejemplo:

ColorStateList myColorStateList = new ColorStateList(
    new int[][] {
        new int[] {
                android.R.attr.state_pressed
            }, //1
            new int[] {
                android.R.attr.state_focused
            }, //2
            new int[] {
                android.R.attr.state_focused, android.R.attr.state_pressed
            } //3
    },
    new int[] {
        Color.RED, //1
            Color.GREEN, //2
            Color.BLUE //3
    }
);

EDITAR ejemplo: una lista de estado de color xml como:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true" android:color="@color/white"/>
    <item android:color="@color/black"/>
</selector>

se vería así

ColorStateList myColorStateList = new ColorStateList(
        new int[][]{
                new int[]{android.R.attr.state_pressed},
                new int[]{}
        },
        new int[] {
                context.getResources().getColor(R.color.white),
                context.getResources().getColor(R.color.black)
        }
);
Suau avatar Mar 29 '2013 12:03 Suau

A continuación se muestra un ejemplo de cómo crear ColorListmediante programación en Kotlin:

val colorList = ColorStateList(
        arrayOf(
                intArrayOf(-android.R.attr.state_enabled),  // Disabled
                intArrayOf(android.R.attr.state_enabled)    // Enabled
        ),
        intArrayOf(
                Color.BLACK,     // The color for the Disabled state
                Color.RED        // The color for the Enabled state
        )
)
Jonathan Ellis avatar Feb 19 '2019 16:02 Jonathan Ellis