Eu tenho um botão definido conforme mostrado abaixo. Quando desejo desativá-lo, eu uso my_btn.setEnabled(false)
, mas também gostaria de desativá- lo. Como eu posso fazer isso?
obrigado
<Button android:id="@+id/buy_btn" style="@style/srp_button" />
style / srp_button
<style name="srp_button" parent="@android:style/Widget.Button">
<item name="android:background">@drawable/btn_default</item>
<item name="android:layout_width">wrap_content</item>
<item name="android:layout_height">wrap_content</item>
<item name="android:textColor">#ffffff</item>
<item name="android:textSize">14sp</item>
<item name="android:typeface">serif</item>
<item name="android:paddingLeft">30dp</item>
<item name="android:paddingRight">30dp</item>
<item name="android:paddingTop">5dp</item>
<item name="android:paddingBottom">5dp</item>
</style>
drawable / btn_default.xml
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="@color/pink" />
<corners android:radius="6dp" />
</shape>
Respostas:
Você deve fornecer 3 ou 4 estados
btn_defaut.xml
como seletor.Você fornecerá efeito e pano de fundo para os estados de acordo.
Aqui está uma discussão detalhada: Botão Android padrão com uma cor diferente
fonte
android:state_disable="true"
ele mostrará o estado quando o Botão está desabilitado, a maneira mais fácil e recomendada.android:state_disable="true"
, existe? Você está se referindo aandroid:state_enabled="false"
?Você também pode fazer com que apareça como desativado, definindo o alfa (tornando-o semitransparente). Isso é especialmente útil se o fundo do botão for uma imagem e você não quiser criar estados para ele.
atualização: escrevi a solução acima antes do Kotlin e quando era novato. É mais uma solução "rápida e suja", mas não a recomendo em um ambiente profissional.
Hoje, se eu quisesse uma solução genérica que funcionasse em qualquer botão / visualização sem precisar criar uma lista de estados, eu criaria uma extensão Kotlin.
Em Java, você pode fazer algo semelhante com uma função util estática e só teria que passar a visão como variável. Não é tão limpo, mas funciona.
fonte
View
. A partir deste post G + : "Se a sua exibição não contém sobreposição de comandos de desenho,setAlpha()
é otimizado para longe e nós simplesmente modificar a pintura objetos para aplicar o alfa adequada Isso acontece quando.View.hasOverlappingRendering()
Retornos verdade.ImageView
S eTextView
s sem drawable fundo são candidatos comuns para este otimização. Se você está nesta situação, use osetAlpha()
quanto quiser. ".A solução mais fácil é definir o filtro de cor para a imagem de fundo de um botão como eu vi aqui
Você pode fazer o seguinte:
Espero ter ajudado alguém ...
fonte
Mode.SRC_IN
deva ser usado em vez de Multiply. Consulte stackoverflow.com/a/17112876/550471Todas as respostas fornecidas funcionam bem, mas lembro-me de aprender que usar setAlpha pode ser uma má ideia em termos de desempenho (mais informações aqui ). Portanto, criar um StateListDrawable é uma ideia melhor para gerenciar o estado desabilitado dos botões. Veja como:
Crie um XML btn_blue.xml na pasta res / drawable:
Crie um estilo de botão em res / values / styles.xml
Em seguida, aplique este estilo ao seu botão:
Agora, quando você ligar para
btnBlue.setEnabled(true)
OU,btnBlue.setEnabled(false)
as cores do estado mudarão automaticamente.fonte
Defina clicável como falso e altere a cor do fundo como:
fonte
Você deve criar um arquivo XML para o botão desativado ( drawable / btn_disable.xml )
E crie um seletor para o botão ( drawable / btn_selector.xml )
Adicione o seletor ao seu botão
fonte
fonte
Usei este código para isso:
fonte
Tentei as soluções acima, mas nenhuma delas pareceu funcionar para mim. Eu escolhi a seguinte opção:
fonte