¿Cómo creo ColorStateList mediante programación?
Estoy intentando crear ColorStateList
programá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?
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)
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)
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)
}
);
A continuación se muestra un ejemplo de cómo crear ColorList
mediante 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
)
)