Estou tentando criar um ColorStateList
programaticamente usando isso:
ColorStateList stateList = new ColorStateList(states, colors);
Mas não tenho certeza de quais são os dois parâmetros.
Conforme a documentação:
public ColorStateList (int[][] states, int[] colors)
Adicionado no nível 1 da API
Cria um ColorStateList que retorna o mapeamento especificado dos estados para as cores.
Alguém pode me explicar como criar isso?
Qual é o significado da matriz bidimensional para estados?
android
android-color
Anukool
fonte
fonte
{pressed}
,{focused}
,{-enabled}
,{}
. Para uma alternância pode ser{checked, pressed}
,{pressed}
,{checked, focused}
,{focused}
,{checked}
,{-enabled}
,{}
. Ou uma alternância que ignora foco:{checked, pressed}
,{pressed}
,{checked}
,{-enabled}
,{}
.A primeira dimensão é uma matriz de conjuntos de estados, a segunda é o próprio conjunto de estados. A matriz de cores lista as cores de cada conjunto de estados correspondentes; portanto, o comprimento da matriz de cores deve corresponder à primeira dimensão da matriz de estados (ou será interrompida quando o estado for "usado"). Aqui e exemplo:
espero que isto ajude.
Exemplo de edição: uma lista de estados de cores xml como:
ficaria assim
fonte
new int[]{}
last - como mostrado no bloco de código final desta resposta. O único valor negado que normalmente uso é "-enabled". Outro exemplo, se você quiser três cores diferentes: "focado + pressionado", "focado + não pressionado", "pressionada + não focado", você pode simplesmente colocar{focused, pressed}
,{focused}
,{pressed}
. O primeiro "verdadeiro" será usado.{pressed}
,{-pressed}
,{focused}
,{-focused
}. O problema é esse{pressed}
e{-pressed}
abrange TODAS as possibilidades (o botão é pressionado ou não pressionado), para que nenhuma cor listada mais tarde seja usada.Às vezes isso será suficiente:
fonte
Infelizmente, nenhuma das soluções funciona para mim.
Este é o construtor do código fonte:
fonte
Aqui está um exemplo de como criar uma
ColorList
programação no Kotlin:fonte
Rendendo a resposta de Jonathan Ellis , no Kotlin, você pode definir uma função auxiliar para tornar o código um pouco mais idiomático e mais fácil de ler, para que você possa escrever isso:
colorStateListOf
pode ser implementado assim:Eu também tenho:
Para que eu possa chamar o mesmo nome da função, não importa se é um seletor ou uma cor única.
fonte
Minha classe de construtor para create
ColorStateList
Exemplo de uso
fonte
se você usar o recurso Colors.xml
fonte
getResources()
está obsoleta, é agoraContextCompat.getColor(this,R.color.colorname);
ouContextCompat.getColor(getActivity(),R.color.colorname);
para uso em um fragmentonew int[0]
(como um elemento na lista do primeiro parâmetro) é uma matriz de comprimento zero e representa a configuração da cor padrão. Aqui é o único elemento, o que significa que a tonalidade é aplicada a todos os estados do botão. Isso é equivalente aonew int[]{}
visto na resposta de Roger Alien.