Geralmente, você não pode alterar estilos de forma programática; você pode definir a aparência de uma tela, ou parte de um layout, ou botão individual em seu layout XML usando temas ou estilos . Os temas podem, no entanto, ser aplicados de forma programática .
Também existe um StateListDrawable
que permite definir drawables diferentes para cada estado em que você Button
pode estar, seja ele focado, selecionado, pressionado, desabilitado e assim por diante.
Por exemplo, para fazer com que seu botão mude de cor quando for pressionado, você pode definir um arquivo XML chamado res/drawable/my_button.xml
diretório como este:
<?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/btn_pressed" />
<item
android:state_pressed="false"
android:drawable="@drawable/btn_normal" />
</selector>
Você pode então aplicar esse seletor a um Button
definindo a propriedade android:background="@drawable/my_button"
.
style
atributo Android , mas pode definir programaticamente o plano de fundo de umButton
como faria com qualquer outra visualização, se isso for suficiente. Além disso, comoButton
herda deTextView
, você pode alterar as propriedades do texto. Basta olhar a documentação da API para esses itens ... developer.android.com/reference/android/view/…Em primeiro lugar, você não precisa usar um inflador de layout para criar um botão simples. Você pode apenas usar:
Se quiser estilizar o botão, você tem 2 opções: a mais simples é apenas especificar todos os elementos no código, como muitas das outras respostas sugerem:
A outra opção é definir o estilo em XML e aplicá-lo ao botão. No caso geral, você pode usar um
ContextThemeWrapper
para isso:Para alterar os atributos relacionados ao texto em um TextView (ou suas subclasses como Button), existe um método especial:
Este último não pode ser usado para alterar todos os atributos; por exemplo, para alterar o preenchimento, você precisa usar a
ContextThemeWrapper
. Mas para cor de texto, tamanho, etc. você pode usarsetTextAppearance
.fonte
Sim, você pode usar, por exemplo, em um botão
fonte
Você pode criar atributos de estilo como:
no lugar de:
fonte
Se você estiver usando a Biblioteca de suporte, você pode simplesmente usar
para TextViews e botões. Existem classes semelhantes para o resto das Visualizações :-)
fonte
Para quem procura uma resposta material, consulte esta postagem do SO: Botões para colorir no Android com Material Design e AppCompat
Usei uma combinação desta resposta para definir a cor do texto padrão do botão como branco para meu botão: https://stackoverflow.com/a/32238489/3075340
Então esta resposta https://stackoverflow.com/a/34355919/3075340 para definir programaticamente a cor de fundo. O código para isso é:
your_colored_button
pode ser apenas um normalButton
botão ou AppCompat, se desejar - testei o código acima com os dois tipos de botão e funciona.EDIT: descobri que os dispositivos pré-pirulito não funcionam com o código acima. Veja esta postagem sobre como adicionar suporte para dispositivos pré-lollipop: https://stackoverflow.com/a/30277424/3075340
Basicamente, faça isso:
fonte
Dependendo de quais atributos de estilo você gostaria de alterar, você pode usar a biblioteca de Paris:
Muitos atributos como background, padding, textSize, textColor, etc. são suportados.
Isenção de responsabilidade: eu sou o autor da biblioteca.
fonte
A resposta de @Dayerman e @h_rules está certa. Para dar um exemplo elaborado com código, na pasta drawable, crie um arquivo xml chamado button_disabled.xml
Então, em Java,
Isso definirá a propriedade do botão como desativada e definirá a cor como prata.
[A cor é definida em color.xml como:
fonte
Em tempo de execução, você sabe qual estilo deseja que seu botão tenha. Portanto, de antemão, em xml na pasta de layout, você pode ter todos os botões prontos para usar com os estilos que você precisa. Portanto, na pasta de layout, você pode ter um arquivo chamado: button_style_1.xml. O conteúdo desse arquivo pode ser semelhante a:
Se você estiver trabalhando com fragmentos, em onCreateView você infla esse botão, como:
onde container é o container ViewGroup associado ao método onCreateView que você substitui ao criar seu fragmento.
Precisa de mais dois desses botões? Você os cria assim:
Você pode personalizar esses botões:
Em seguida, você adiciona seus botões estilizados e personalizados ao contêiner de layout que também aumentou no método onCreateView:
E é assim que você pode trabalhar dinamicamente com botões estilizados.
fonte
Fiz uma interface auxiliar para isso usando o padrão de suporte.
Agora, para cada estilo que você deseja usar pragmaticamente, apenas implemente a interface, por exemplo:
Declare um estilizável em seu
attrs.xml
, o estilizável para este exemplo é:Aqui está o estilo declarado em
styles.xml
:E, finalmente, a implementação do suporte de estilo:
Achei isso muito útil, pois pode ser facilmente reutilizado e mantém o código limpo e detalhado, eu recomendaria usar isso apenas como uma variável local para que possamos permitir que o coletor de lixo faça seu trabalho assim que terminarmos de definir todos os estilos .
fonte
Eu enfrentei o mesmo problema recentemente. aqui está como eu resolvi isso.
Obrigado !
fonte