Modificação das cores dos botões via Java no Android

Bom dia
Estou com uma pequena duvida, queria saber um método que funciona em todas as API do Android para (Pelo menos da 16 ate a 22) para mudar a cor do botão.

Estou fazendo da seguinte maneira:

btn_ajuda.getBackground().setColorFilter(new PorterDuffColorFilter(Color.BLUE, PorterDuff.Mode.MULTIPLY));

o que funciona para Androids 5.0 para cima, já em versões anteriores não é modificado nada.
Uma alternativa seria usar

 btn_ajuda.setBackgroundColor(Color.BLUE);

Que funciona em todas as versões, porem esse método perde o “Design” do botão.

Queria saber se tem um jeito alternativo.

Obs.: Tem q ser via Java mesmo, uma vez que quero deixar o usuário a opção de personalizar as cores.

Olá Paulo,

Faça dessa forma:

btn_ajuda.setBackgroundColor(getResources().getColor(R.color.nome_da_cor));

Lembrando que você deve ter essa cor setada no seu colors.xml, por exemplo:

<color name="nome_da_cor">#0309fb</color>

Abraços.

Não tem como, como falei quero dar a oportunidade ao usuário de escolher o esquema de cores, seria complicado criar o colors.xml para isso.

Fala Paulo,

Mas o usuário vai poder escolher entre uma lista de cores existentes, certo? Ou qualquer cor que ele quiser?

Não faz muito sentido o usuário colocar qualquer cor.

Abraços.

A minha ideia original é de fato qualquer cor, as que melhor agrade o usuário =) kkk
A unica restrição q vou colocar é q a cor do textos tem q ser diferente da cor de fundo.

Fala Paulo,

O que não consegui entender, é quais cores, como vai funcionar?

De onde vão vir as cores que o usuário pode escolher? O usuário vai abrir uma paleta de cores?

Dependendo de como for o método de escolha de cores, você consegue identificar qual cor for escolhida.

Abraços.

A escolha das cores é usando uma Activity para esse finalidade
Nela tem 3 SeekBar (R,G,B) e uma view para visualizar as cores


Estou pensando em mudar em vez de um Activity usar uma caixa de dialogo só q eu tenho q dar uma estuda.
Usando esse método o usuário pode escolher qualquer cor.
Mas a questão não é bem a cor q ele vai escolher. Queria saber um método de mudar as cores dos botões que funciona em qualquer versão.

Cores padrões do Android

Cores que eu personalizei
Cor do botão = rgb(32,32,32)
Cor do plano de fundo = rgb(0,0,0)
Cor da letra = rgb(100,34,130)

Usei o metodo

PorterDuffColorFilter filtro = new PorterDuffColorFilter(SistemaDeCores.corPrimariaActivity, PorterDuff.Mode.MULTIPLY);); btn.getBackground().setColorFilter(filtro); btn.setTextColor(SistemaDeCores.corTextoActivity);
Funciona bonito para Android 5.0

já no Android 4.4 as cores dos botões não mudaram só da letras
Simulando no Android 4.4

Então uma alternativa que pensei foi fazer o seguinte

if( Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP){ PorterDuffColorFilter filtro = new PorterDuffColorFilter(SistemaDeCores.corPrimariaActivity, PorterDuff.Mode.MULTIPLY); btn.getBackground().setColorFilter(filtro); else{ btn.setBackgroundColor(SistemaDeCores.corPrimariaActivity); } btn.setTextColor(SistemaDeCores.corTextoActivity);

Só q o resultado foi isso:

O q perde todo o design do botão.