quelqu'un pourrait-il m'expliquer comment implémenter certains des commentaires tactiles visuels présentés lors de Google I/O 2014 dans un CardView.
Voici comment j'utilise CardView en XML, il manque probablement quelque chose de petit, alors je me demandais si quelqu'un pourrait m'aider ?.
<!-- A CardView -->
<Android.support.v7.widget.CardView
xmlns:card_view="http://schemas.Android.com/apk/res-auto"
Android:id="@+id/CardView_1"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:layout_marginLeft="10dp"
Android:layout_marginRight="10dp"
Android:layout_marginTop="10dp"
card_view:cardCornerRadius="4dp"
Android:elevation="2dp">
<LinearLayout
Android:id="@+id/LinearLayout_1"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:orientation="horizontal"
Android:onClick="RunSomeMethod"">
<!-- Main CardView Content In Here-->
</LinearLayout> </Android.support.v7.widget.CardView>
API 11 + :
Ajouter Android:foreground="?android:attr/selectableItemBackground"
à votre élément CardView
.
API 9 + :
Ajouter Android:foreground="?selectableItemBackground"
à votre élément CardView
.
Edit: l'ondulation provenant du centre et non du point de contact est un bogue connu, qui a été corrigé .
Pour dessiner une sélection sur pré-Lollipop et post-Lollipop correctement, vous pouvez utiliser l'approche suivante (l'idée est d'utiliser encadré dessinable du sélecteur avec arrondi angles pour pré-Lollipop - l’échantillon ci-dessous utilise des couleurs personnalisées, vous pouvez les changer par défaut) :
Android:foreground="@drawable/card_foreground"
post-sucette
drawable-v21/card_foreground.xml
<ripple xmlns:Android="http://schemas.Android.com/apk/res/Android" Android:color="#20000000"
Android:drawable="@drawable/card_foreground_selector" />
drawable-v21/card_foreground_selector.xml
<selector xmlns:Android="http://schemas.Android.com/apk/res/Android">
<item Android:state_pressed="true">
<shape Android:shape="rectangle">
<solid Android:color="#18000000"/>
</shape>
</item>
<item Android:state_focused="true" Android:state_enabled="true">
<shape Android:shape="rectangle">
<solid Android:color="#0f000000"/>
</shape>
</item>
</selector>
pré-sucette
drawable/card_foreground.xml (vous aurez besoin de Tweak valeurs insérées en fonction de l'altitude de votre carte)
<inset xmlns:Android="http://schemas.Android.com/apk/res/Android" Android:drawable="@drawable/card_foreground_selector"
Android:insetLeft="2dp"
Android:insetRight="2dp"
Android:insetTop="4dp"
Android:insetBottom="4dp"/>
drawable/card_foreground_selector.xml
<selector xmlns:Android="http://schemas.Android.com/apk/res/Android">
<item Android:state_pressed="true">
<shape Android:shape="rectangle">
<solid Android:color="#18000000"/>
<corners Android:radius="@dimen/card_radius" />
</shape>
</item>
<item Android:state_focused="true" Android:state_enabled="true">
<shape Android:shape="rectangle">
<solid Android:color="#0f000000"/>
<corners Android:radius="@dimen/card_radius" />
</shape>
</item>
</selector>
Cela a aidé dans mon cas
Background:
Le CardView
ignore Android:background
en faveur de app:cardBackground
qui ne peut être que couleur. La bordure et l'ombre font en fait partie de l'arrière-plan, vous ne pouvez donc pas définir le vôtre.
Solution:
Rendre la mise en page à l'intérieur du CardView
cliquable au lieu de la carte elle-même. Vous avez déjà écrit les deux attributs nécessaires pour cette présentation:
Android:clickable="true"
Android:background="?android:selectableItemBackground"
Voici ma solution. Il utilise l’ondulation pour Lollipop + et l’avant-plan statique pour les appareils pré-Lollipop.
<Android.support.v7.widget.CardView
...
Android:foreground="?android:attr/selectableItemBackground">