Estoy tratando de crear un ColorStateList
programa 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 la matriz bidimensional para los estados?
android
android-color
Anukool
fuente
fuente
{pressed}
,{focused}
,{-enabled}
,{}
. Para una palanca que puede haber{checked, pressed}
,{pressed}
,{checked, focused}
,{focused}
,{checked}
,{-enabled}
,{}
. O una palanca que hace caso omiso de enfoque:{checked, pressed}
,{pressed}
,{checked}
,{-enabled}
,{}
.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 debe coincidir con la primera dimensión de la matriz de estados (o se bloqueará cuando el estado se "use"). Aquí y ejemplo:
espero que esto ayude.
EDITAR ejemplo: una lista de estados de color XML como:
se vería así
fuente
new int[]{}
último: como se muestra en el bloque de código final de esta respuesta. El único valor negado que uso normalmente es "-habilitado". Otro ejemplo, si quieres tres colores diferentes: "enfocada + presionado", "centrado + no presionado", "presiona + No enfocado", usted puede poner simplemente{focused, pressed}
,{focused}
,{pressed}
. Se utilizará el primer "verdadero".{pressed}
,{-pressed}
,{focused}
,{-focused
}. El problema es que{pressed}
y{-pressed}
cubre TODAS las posibilidades (el botón se presiona o no se presiona), por lo que no se utilizarán los colores enumerados más adelante.A veces esto será suficiente:
fuente
Lamentablemente, ninguna de las soluciones funciona para mí.
Este es el constructor del código fuente:
fuente
Aquí hay un ejemplo de cómo crear un
ColorList
programa en Kotlin:fuente
Rechazando la respuesta de Jonathan Ellis , en Kotlin puede definir una función auxiliar para hacer que el código sea un poco más idiomático y más fácil de leer, por lo que puede escribir esto en su lugar:
colorStateListOf
puede implementarse así:Tambien tengo:
Para poder llamar al mismo nombre de función, sin importar si es un selector o un solo color.
fuente
Mi clase de constructor para crear
ColorStateList
Ejemplo de uso
fuente
si usa el recurso Colors.xml
fuente
getResources()
está en desuso, es ahoraContextCompat.getColor(this,R.color.colorname);
oContextCompat.getColor(getActivity(),R.color.colorname);
para uso en un Fragmentonew int[0]
(como un elemento en la lista del primer parámetro) es una matriz de longitud cero y representa la configuración del color predeterminado. Aquí es el único elemento, lo que significa que el tinte se aplica a todos los estados del botón. Esto es equivalente a lonew int[]{}
visto en la respuesta de Roger Alien.