Sous Android, lorsque je définis l'image d'arrière-plan sur Button, je ne vois aucun effet sur le bouton.
J'ai besoin d'un effet sur le bouton pour que l'utilisateur puisse reconnaître que le bouton a été cliqué.
Le bouton doit être sombre pendant quelques secondes lorsqu'il a cliqué, alors que dois-je faire pour cela?
Merci.
Réponses:
Cela peut être réalisé en créant un fichier xml dessinable contenant une liste d'états pour le bouton. Par exemple, si vous créez un nouveau fichier xml appelé "button.xml" avec le code suivant:
Pour conserver l'image d'arrière-plan avec une apparence sombre sur presse, créez un deuxième fichier xml et appelez-le gradient.xml avec le code suivant:
Dans le xml de votre bouton, définissez l'arrière-plan comme le bouton xml par exemple
J'espère que cela t'aides!
Modifier: le code ci-dessus a été modifié pour afficher une image (VOTRE IMAGE) dans le bouton par opposition à une couleur de bloc.
la source
C'est plus simple quand vous avez beaucoup de boutons d'image et que vous ne voulez pas écrire xml-s pour chaque bouton.
Version Kotlin:
Version Java:
la source
Créez votre
AlphaAnimation
objet qui décide de l'ampleur de l'effet de fondu du bouton, puis laissez-le démarrer dans leonClickListener
de vos boutonsPar exemple :
bien sûr, c'est juste un moyen, pas le plus préféré, c'est juste plus facile
la source
Vous pouvez simplement utiliser le premier plan pour
View
obtenir un effet cliquable:Pour une utilisation avec un thème sombre, ajoutez également un thème à votre
layout
(pour que l'effet cliquable soit clair):la source
Pour rendre votre élément cohérent avec l'apparence du système, essayez de référencer l'attribut système
android:attr/selectableItemBackground
dans la balise d'arrière-plan ou de premier plan de la vue souhaitée:Utilisez les deux attributs pour obtenir l'effet souhaité avant / après le niveau d'API 23 respectivement.
https://stackoverflow.com/a/11513474/4683601
la source
Ou en utilisant une seule image d'arrière-plan, vous pouvez obtenir l'effet de clic en utilisant
setOnTouchListener
Deux manières
Et si vous ne voulez pas utiliser
setOnTouchLister
, une autre façon d'y parvenir estla source
je veux juste ajouter un autre moyen simple de le faire: si votre ImageButton reste son arrière-plan et que vous ne le définissez pas sur null, il fonctionnera comme un bouton normal et affichera l'animation de clic tout en cliquant exactement comme les autres boutons. l'arrière-plan tant qu'il est toujours là:
Les rembourrages ne laisseront pas l'arrière-plan être visible et feront agir le bouton comme les autres boutons.
la source
C'est la meilleure solution que j'ai trouvée en tenant compte de la réponse de @ Vinayak. Toutes les autres solutions présentent des inconvénients différents.
Tout d'abord, créez une fonction comme celle-ci.
Explication:
getConstantState (). newDrawable () est utilisé pour cloner le Drawable existant sinon le même drawable sera utilisé. En savoir plus ici: Android: Cloner un dessinable afin de créer un StateListDrawable avec des filtres
mutate () est utilisé pour empêcher le clone de Drawable de partager son état avec d'autres instances de Drawable. En savoir plus à ce sujet ici: https://developer.android.com/reference/android/graphics/drawable/Drawable.html#mutate ()
Usage:
Vous pouvez passer n'importe quel type de vue (Button, ImageButton, View, etc.) comme paramètre à la fonction et ils obtiendront l'effet de clic qui leur sera appliqué.
la source
la source
Utilisez RippleDrawable pour un effet de pression / clic sur l'état Material Design.
Pour ce faire, créez un élément ripple en tant que dossier .xml sous / drawable et utilisez-le dans android: background pour toutes les vues.
Effet pour l'icône enfoncée / cliquée, utilisez l'effet d'entraînement circulaire, par exemple:
<ripple xmlns:android="http://schemas.android.com/apk/res/android" android:color="@android:color/darker_gray" />
Effet pour la vue cliquée avec la limite du rectangle, nous pouvons ajouter une ondulation sur le dessinable existant comme ci-dessous:
<?xml version="1.0" encoding="utf-8"?> <ripple xmlns:android="http://schemas.android.com/apk/res/android" android:color="#000000"> <item android:drawable="@drawable/your_background_drawable"/> </ripple>
la source
Pour toutes les vues
android:background="?android:attr/selectableItemBackground"
Mais pour cardview qui a une utilisation d'élévation
android:foreground="?android:attr/selectableItemBackground"
Pour l'effet de clic circulaire comme dans la barre d'outils
Vous devez également définir
la source
Faire un ajout mineur à la réponse d'Andràs:
Vous pouvez utiliser
postDelayed
pour faire durer le filtre de couleur pendant une petite période de temps pour le rendre plus visible:Vous pouvez modifier la valeur du délai 100L en fonction de vos besoins.
la source
Si vous utilisez un arrière-plan xml au lieu d'IMG, supprimez simplement ceci:
de la 1ère réponse que @Ljdawson nous a donnée.
la source