Gostaria de mudar ligeiramente a cor de um botão padrão do Android para corresponder melhor à marca de um cliente.
A melhor maneira que encontrei para fazer isso até agora é alterar o Button
drawable do para o drawable localizado em res/drawable/red_button.xml
:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true" android:drawable="@drawable/red_button_pressed" />
<item android:state_focused="true" android:drawable="@drawable/red_button_focus" />
<item android:drawable="@drawable/red_button_rest" />
</selector>
Mas fazer isso exige que eu realmente crie três desenháveis diferentes para cada botão que quero personalizar (um para o botão em repouso, um quando focado e outro quando pressionado). Isso parece mais complicado e não SECO do que eu preciso.
Tudo o que realmente quero fazer é aplicar algum tipo de transformação de cor ao botão. Existe uma maneira mais fácil de mudar a cor de um botão do que eu?
android
android-layout
empapar
fonte
fonte
Respostas:
Descobri que tudo isso pode ser feito em um arquivo com bastante facilidade. Coloque algo como o seguinte código em um arquivo nomeado
custom_button.xml
e definabackground="@drawable/custom_button"
na visualização do botão:fonte
"Error: No resource found that matches the given name (at 'color' with value '@color/yellow1')"
Essas referências são construídas em cores? Parece que eu preciso de um res / valores / color.xml para fazer este trabalhoSeguindo a resposta de Tomasz, você também pode definir programaticamente a tonalidade de todo o botão usando o modo de multiplicação PorterDuff. Isso mudará a cor do botão, e não apenas a tonalidade.
Se você começar com um botão sombreado cinza padrão:
lhe dará um botão sombreado vermelho,
fornece um botão sombreado verde etc., onde o primeiro valor é a cor no formato hexadecimal.
Ele funciona multiplicando o valor atual da cor do botão pelo valor da cor. Tenho certeza de que também há muito mais que você pode fazer com esses modos.
fonte
import android.graphics.PorterDuff;
Mike, você pode estar interessado em filtros de cores.
Um exemplo:
tente isso para obter a cor desejada.
fonte
Esta é a minha solução que funciona perfeitamente a partir da API 15 . Esta solução mantém todos os efeitos padrão de clique no botão, como material
RippleEffect
. Não testei em APIs inferiores, mas deve funcionar.Tudo o que você precisa fazer é:
1) Crie um estilo que mude apenas
colorAccent
:2) Adicione estas duas linhas ao seu
button
widget:Widget Botão de Amostra
fonte
colorAccent
influencia mais do que apenas o segundo plano do botão.Agora também é possível usar de appcompat-v7 AppCompatButton com o
backgroundTint
atributo:fonte
app:backgroundTint
vez deandroid:backgroundTint
usar o AppCompat.Gosto da sugestão do filtro de cores nas respostas anteriores de @conjugatedirection e @Tomasz; No entanto, descobri que o código fornecido até agora não era tão facilmente aplicado quanto eu esperava.
Primeiro, não foi mencionado onde aplicar e limpar o filtro de cores. É possível que haja outros bons lugares para fazer isso, mas o que me veio à mente foi um OnTouchListener .
Pela minha leitura da pergunta original, a solução ideal seria aquela que não envolva nenhuma imagem. A resposta aceita usando custom_button.xml do @emmby provavelmente é um ajuste melhor do que os filtros de cores, se esse for o seu objetivo. No meu caso, estou começando com uma imagem png de um designer de interface do usuário com a aparência do botão. Se eu definir o plano de fundo do botão para esta imagem, o feedback de realce padrão será perdido completamente. Esse código substitui esse comportamento por um efeito de escurecimento programático.
Eu extraí isso como uma classe separada para aplicação em vários botões - mostrada como classe interna anônima apenas para entender.
fonte
Se você estiver criando botões coloridos com XML, poderá tornar o código um pouco mais limpo, especificando o estado focado e pressionado em um arquivo separado e reutilizá-los. Meu botão verde fica assim:
fonte
A solução mais curta que funciona com qualquer versão do Android:
Notas / Requisitos :
app:
espaço para nome e não oandroid:
espaço para nome!versão appcompat> 24.2.0
dependências {compile 'com.android.support:appcompat-v7:25.3.1'}
Explicação :
fonte
app:backgroundTint="@color/my_color"
não funcionou.android:backgroundTint="@color/my_color"
funcionou perfeitamente embora.Eu estou usando essa abordagem
style.xml
Como você pode ver acima, estou usando um estilo personalizado para o meu botão. A cor do botão corresponde à cor de destaque. Acho essa abordagem muito melhor do que definir,
android:background
pois não vou perder o efeito cascata que o Google oferece.fonte
Existe uma maneira muito mais fácil agora: android-holo-colors.com
Ele permitirá que você altere as cores de todos os desenháveis holo (botões, giradores, ...) facilmente. Você seleciona a cor e, em seguida, baixa um arquivo zip contendo desenhos para todas as resoluções.
fonte
Use-o desta maneira:
fonte
Em
<Button>
usoandroid:background="#33b5e5"
. ou melhorandroid:background="@color/navig_button"
fonte
A biblioteca de componentes do DroidUX possui um
ColorButton
widget cuja cor pode ser alterada facilmente, via definição xml e programaticamente em tempo de execução, para que você possa até permitir que o usuário defina a cor / tema do botão, se o seu aplicativo permitir.fonte
Você também pode usar esta ferramenta online para personalizar seu botão http://angrytools.com/android/button/ e usar
android:background="@drawable/custom_btn"
para definir o botão personalizado no seu layout.fonte
Você pode definir o tema do seu botão para este
fonte
Uma maneira fácil é apenas definir uma classe Button personalizada que aceite todas as propriedades que você deseja, como raio, gradiente, cor pressionada, cor normal etc. Uma amostra está aqui
Isso é extremamente útil se você tiver muitos botões com as mesmas propriedades, como raio, cor selecionada etc. Você pode personalizar o botão herdado para lidar com essas propriedades adicionais.
Resultado (nenhum seletor de plano de fundo foi usado).
Botão Normal
Botão pressionado
fonte
A maneira como faço com um botão com estilo diferente que funciona muito bem é subclassificar o objeto Button e aplicar um filtro de cores. Isso também lida com estados ativados e desativados aplicando um alfa ao botão.
fonte
values \ styles.xml
então:
fonte
De acordo com as diretrizes de design do material, você precisa usar o estilo como o código abaixo
e no layout, adicione esta propriedade ao seu botão
fonte
É simples .. adicione essa dependência ao seu projeto e crie um botão com 1. Qualquer forma 2. Qualquer cor 3. Qualquer borda 4. Com efeitos materiais
https://github.com/manojbhadane/QButton
fonte