J'ai créé un bouton et je veux ajouter un effet d'entraînement à ce bouton!
J'ai créé un fichier XML bouton bg: (bg_btn.xml)
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
<gradient android:startColor="#FFFFFF" android:endColor="#00FF00" android:angle="270" />
<corners android:radius="3dp" />
<stroke android:width="5px" android:color="#000000" />
</shape>
Et voici mon fichier d'effet d'entraînement: (ripple_bg.xml)
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:color="#f816a463"
tools:targetApi="lollipop">
<item android:id="@android:id/mask">
<shape android:shape="rectangle">
<solid android:color="#f816a463" />
</shape>
</item>
</ripple>
Et c'est mon bouton auquel je veux ajouter un effet d'entraînement:
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="New Button"
android:id="@+id/button"
android:layout_centerHorizontal="true"
android:layout_marginTop="173dp"
android:textColor="#fff"
android:background="@drawable/ripple_bg"
android:clickable="true" />
Mais après l'ajout de l'effet d'entraînement, l'arrière-plan du bouton est transparent et le bouton s'affiche uniquement lorsque vous cliquez dessus, comme ceci:
Avant de cliquer
Sur clic
Mais j'ai besoin à la fois de la couleur d'arrière-plan du bouton et de l'effet d'entraînement, j'ai trouvé une partie de ce code dans différents blogs de Stack Overflow, mais cela ne fonctionne toujours pas!
l
oum
au lien de l'image. (voir mon montage)Réponses:
Voici un autre xml dessinable pour ceux qui veulent ajouter tous ensemble un arrière-plan dégradé, un rayon de coin et un effet d'entraînement:
Ajoutez ceci à l'arrière-plan de votre bouton.
PS: cette réponse fonctionne pour Android api 21 et supérieur.
la source
ripple
.Ajoutez le
"?attr/selectableItemBackground"
à l'android:foreground
attribut de votre vue s'il a déjà un arrière-plan avecandroid:clickable="true"
.la source
tools:ignore="UnusedAttribute
).?android:attr/selectableItemBackground
(android:attr
au lieu deattr
)android:foreground
l'attribut n'a pas d'effet sur les niveaux d'API inférieurs à 23Ajouter un effet d'entraînement / une animation à un bouton Android
Remplacez simplement votre attribut de fond de bouton par android: background = "? Attr / selectableItemBackground" et votre code ressemble à ceci.
Une autre façon d'ajouter un effet d'entraînement / une animation à un bouton Android
En utilisant cette méthode, vous pouvez personnaliser la couleur de l'effet d'entraînement. Tout d'abord, vous devez créer un fichier xml dans votre répertoire de ressources dessinables. Créez un fichier ripple_effect.xml et ajoutez le code suivant. res / drawable / ripple_effect.xml
Et définir l'arrière-plan du bouton sur le fichier de ressources dessinable ci-dessus
la source
En plus de la solution de Jigar Patel , ajoutez ceci au ripple.xml pour éviter le fond transparent des boutons.
XML complet :
Utilisez ce ripple.xml comme arrière-plan de votre bouton:
la source
<item android:id="@android:id/mask"> [...]
. Sauf si vous voulez un masque ovale. Merci pour votre réponse!Lorsque le bouton a un arrière-plan du dessinable, nous pouvons ajouter un effet d'entraînement au paramètre de premier plan. Vérifiez ci-dessous le code qu'il fonctionne pour mon bouton avec un arrière-plan différent
Ajouter ci-dessous le paramètre pour l'effet d'entraînement
Pour référence, reportez-vous au lien ci-dessous https://jascode.wordpress.com/2017/11/11/how-to-add-ripple-effect-to-an-android-app/
la source
AppCompat v7 +
Vous devez utiliser
"?android:attr/selectableItemBackground"
ou"?android:attr/selectableItemBackgroundBorderless"
, en fonction de vos préférences. Je préfèreBorderless
.Vous pouvez le mettre dans
android:background
ouandroid:foreground
pour conserver les propriétés existantes.L'élément doit avoir
android:clickable="true"
etandroid:focusable="true"
pour que cela fonctionne, mais de nombreux éléments, tels que les boutons, les onttrue
par défaut.Programmation (Java)
Programmation (Kotlin)
Fonction d'extension Kotlin réutilisable
la source
L'ajout d'attributs de premier plan et cliquables a fonctionné pour moi.
la source
En plus de Sudheesh R
la source
Lorsque vous utilisez android: background, vous remplacez une grande partie du style et de l'apparence d'un bouton par une couleur vide.
Mise à jour: À partir de la version 23.0.0 d'AppCompat, il existe un nouveau style Widget.AppCompat.Button.A coloré qui utilise le colorButtonNormal de votre thème pour la couleur désactivée et colorAccent pour la couleur activée.
Cela vous permet de l'appliquer directement à votre bouton via
Vous pouvez utiliser un dessinable dans votre répertoire v21 pour votre arrière-plan tel que:
Cela garantira que votre couleur d'arrière-plan est? Attr / colorPrimary et que l'animation d'ondulation par défaut est utilisée en utilisant la valeur par défaut? Attr / colorControlHighlight (que vous pouvez également définir dans votre thème si vous le souhaitez).
Remarque: vous devrez créer un sélecteur personnalisé pour moins de v21:
la source
essaye ça
la source
Une approche simple consiste à définir un thème de vue comme indiqué ici .
some_view.xml
some_style.xml
la source
Utilisez simplement:
Au lieu de:
Ne pas oublier de changer
Button
deandroid.support.v7.widget.AppCompatButton
la source
Une solution alternative à l'utilisation de la
<ripple>
balise (que je préfère personnellement ne pas faire, car les couleurs ne sont pas "par défaut"), est la suivante:Créez un dessin pour l'arrière-plan du bouton et incluez-le
<item android:drawable="?attr/selectableItemBackground">
dans le<layer-list>
Ensuite (et je pense que c'est la partie importante) définie par programme
backgroundResource(R.drawable.custom_button)
sur votre instance de bouton.Activité / Fragment
Disposition
custom_button.xml
la source