Comment puis-je avoir un effet d'entraînement dans une disposition simple linéaire/relative lorsque vous touchez la disposition?
J'ai essayé de définir l'arrière-plan d'une mise en page à quelque chose comme:
<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:color="?android:colorControlHighlight" >
<item Android:drawable="@Android:color/white"/>
</ripple>
Cependant, je ne vois qu'un fond blanc et aucun effet d'entraînement lorsque vous touchez la mise en page. Qu'est-ce que je fais mal?
Modifier:
Pour référence, voici mon fichier XML de mise en page:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="250dp"
Android:layout_height="250dp"
Android:background="@drawable/test"
Android:clickable="true">
</RelativeLayout>
Il s'avère que cela fonctionne comme prévu. La valeur standard du thème Matériau colorControlHighlight est #40ffffff
. Donc, sur un fond blanc, cela n'apparaîtra pas. Changer la couleur de surbrillance en quelque chose d'autre fonctionne et/ou changer la couleur de fond de l'objet.
Merci à tous (surtout Alanv de m'avoir orienté dans la bonne direction).
Définissez ces propriétés sur votre mise en page (si votre mise en page a le fond blanc/clair par défaut):
Android:clickable="true"
Android:focusable="true"
Android:background="?attr/selectableItemBackground"
_ {Dans ce cas, vous n'avez pas besoin d'un dessin personnalisable.
Cependant, si votre mise en page a un arrière-plan noir/foncé, vous devrez créer votre propre ondulation comme celle-ci:
<?xml version="1.0" encoding="utf-8"?>
<!-- An white rectangle ripple. -->
<ripple xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:color="@Android:color/white">
<item
Android:id="@Android:id/mask"
Android:gravity="center">
<shape Android:shape="rectangle">
<solid Android:color="@Android:color/white"/>
</shape>
</item>
</ripple>
Et définissez ensuite cette ondulation comme étant votre propriété Android: background.
Vous pouvez voir de nombreux exemples de ces types d’ondulations dans l’AOSP: ici
J'ajoute ceci en plus de la réponse de Igor Ganapolsky au cas où quelqu'un voudrait avoir une mise en page de couleur différente et avoir également un effet d'entraînement. Vous créez simplement un effet d'entraînement dans drawables comme ceci:
ripple.xml
<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:tools="http://schemas.Android.com/tools"
Android:color="@color/rippleColor"
tools:targetApi="Lollipop"> <!-- ripple effect color -->
<item Android:id="@Android:id/background">
<shape Android:shape="rectangle">
<solid Android:color="@color/backgroundColor" /> <!-- background color -->
</shape>
</item>
</ripple>
puis donnez-le comme fond de votre mise en page ou n'importe quel bouton comme Igor Ganapolsky mentionné dans sa réponse.
Android:clickable="true"
Android:background="@drawable/ripple"
Vous devez modifier l'extrait de code suivant dans n'importe quel widget (TextView
/Button
) et vous pouvez implémenter Effet d'ondulation :
Android:clickable="true"
Android:focusable="true"
Android:foreground="?attr/selectableItemBackground"
Et vous êtes prêt à partir.
Définissez Android:clickable="true"
sur votre mise en page.
<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:tools="http://schemas.Android.com/tools"
Android:color="#cfd8dc"
tools:targetApi="Lollipop">
<item Android:id="@Android:id/mask">
<shape Android:shape="rectangle">
<solid Android:color="#d1c4e9" />
</shape>
</item>
</ripple>
Utilisez this ripple.xml dans le dossier Drawable , puis assignez-le en tant que View
Android: background = "@ drawable/ripple"
Android: clickable = "true"
Ajoutez simplement un effet d'entraînement par défaut avec Android:background="?selectableItemBackground"
Comme:
<LinearLayout
Android:layout_width="match_parent"
Android:layout_height="100dp"
Android:background="?selectableItemBackground"
Android:clickable="true"
>
...
</LinearLayout>
Mettez ceci dans votre mise en page:
Android:clickable="true"
Android:background="?attr/selectableItemBackground"
Remarque: il existe un bogue dans la documentation de l'API. Cela fonctionnera uniquement sur API> = 23
Pour toutes les API _ {niveaux utilisez cette Solution
J'essaie toutes ces réponses et rien ne me convient, alors j'ai résolu de créer le style suivant:
<style name="Button.Borderless" parent="Base.Widget.AppCompat.Button.Borderless">
<item name="Android:minHeight">0dp</item>
<item name="Android:minWidth">0dp</item>
<item name="Android:layout_marginLeft">-6dp</item>
<item name="Android:layout_marginRight">-6dp</item>
<item name="Android:paddingTop">0dp</item>
<item name="Android:paddingBottom">0dp</item>
<item name="Android:paddingLeft">6dp</item>
<item name="Android:paddingRight">6dp</item>
</style>
Et puis, j'ai appliqué à ma mise en page linéaire:
<LinearLayout
Android:id="@+id/ll_my_ripple"
style="@style/Button.Borderless">
</LinearLayout>
Voici un exemple pour cliquer sur un exemple de mise en page avec un effet d'entraînement:
<LinearLayout
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:background="?attr/selectableItemBackground"
Android:clickable="true"
Android:focusable="true"
Android:orientation="vertical">