J'ai un bouton défini comme indiqué ci-dessous. Lorsque je veux le désactiver, je l'utilise my_btn.setEnabled(false)
, mais je voudrais également le griser. Comment puis je faire ça?
Merci
<Button android:id="@+id/buy_btn" style="@style/srp_button" />
style / bouton_srp
<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>
Réponses:
Vous devez fournir 3 ou 4 états dans votre en
btn_defaut.xml
tant que sélecteur.Vous fournirez l'effet et le contexte pour les états en conséquence.
Voici une discussion détaillée: Bouton Android standard avec une couleur différente
la source
android:state_disable="true"
cela montrera l'état lorsque le bouton est désactivé, la manière facile et recommandée.android:state_disable="true"
, n'est-ce pas? Parlez-vousandroid:state_enabled="false"
?Vous pouvez également le faire apparaître comme désactivé en définissant l'alpha (le rendant semi-transparent). Ceci est particulièrement utile si l'arrière-plan de votre bouton est une image et que vous ne souhaitez pas lui créer d'états.
mise à jour: j'ai écrit la solution ci-dessus avant Kotlin et quand j'étais recrue. C'est plus une solution «rapide et sale», mais je ne la recommande pas dans un environnement professionnel.
Aujourd'hui, si je voulais une solution générique qui fonctionne sur n'importe quel bouton / vue sans avoir à créer une liste d'états, je créerais une extension Kotlin.
En Java, vous pouvez faire quelque chose de similaire avec une fonction util statique et il vous suffit de passer la vue en tant que variable. Ce n'est pas aussi propre mais ça marche.
la source
View
. De ce post Google+ : "Si votre vue ne contient pas de commandes de dessin qui se chevauchent, ellesetAlpha()
est optimisée et nous modifions simplement les objets Paint pour appliquer l'alpha approprié. Cela se produit lorsqueView.hasOverlappingRendering()
renvoie true. LesImageView
s etTextView
s sans arrière-plan dessinables sont des candidats courants pour cela optimisation. Si vous êtes dans cette situation, utilisez-setAlpha()
en autant que vous le souhaitez. ".La solution la plus simple consiste à définir le filtre de couleur sur l'image d'arrière-plan d'un bouton comme je l'ai vu ici
Vous pouvez faire comme suit:
J'espère que j'ai aidé quelqu'un ...
la source
Mode.SRC_IN
devrait être utilisé à la place de la multiplication. Voir stackoverflow.com/a/17112876/550471Toutes les réponses données fonctionnent bien, mais je me souviens avoir appris que l'utilisation de setAlpha peut être une mauvaise idée en termes de performances (plus d'informations ici ). Donc, créer un StateListDrawable est une meilleure idée pour gérer l'état désactivé des boutons. Voici comment:
Créez un fichier XML btn_blue.xml dans le dossier res / drawable:
Créer un style de bouton dans res / values / styles.xml
Ensuite, appliquez ce style à votre bouton:
Maintenant quand tu appelles
btnBlue.setEnabled(true)
OU,btnBlue.setEnabled(false)
les couleurs de l'état changent automatiquement.la source
Définissez Clickable sur false et modifiez la couleur du fond comme suit:
la source
Vous devez créer un fichier XML pour le bouton désactivé ( drawable / btn_disable.xml )
Et créez un sélecteur pour le bouton ( drawable / btn_selector.xml )
Ajoutez le sélecteur à votre bouton
la source
la source
J'ai utilisé ce code pour cela:
la source
J'ai essayé les solutions ci-dessus mais aucune d'entre elles ne semblait fonctionner pour moi. Je suis allé avec l'option suivante:
la source