Le retour tactile avec RecyclerView et CardView
J'aimerais activer le retour tactile pour mon Open-Source de la bibliothèque.
J'ai créé un RecyclerView
et un CardView
. Le CardView
contient différents domaines et différents onClick
actions. Maintenant j'aimerais déclencher l'effet d'entraînement si un utilisateur clique n'importe où sur la carte, mais je ne suis pas en mesure d'obtenir ce comportement.
C'est mon listitem,
Vous pouvez le trouver sur GitHub trop: https://github.com/mikepenz/AboutLibraries/blob/master/library/src/main/res/layout/listitem_opensource.xml
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:clickable="true"
android:background="@drawable/button_rect_normal"/>
<LinearLayout
android:padding="6dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<LinearLayout
android:gravity="center_vertical"
android:paddingLeft="8dp"
android:paddingRight="8dp"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/libraryName"
android:textColor="@color/title_openSource"
android:textSize="@dimen/textSizeLarge_openSource"
android:textStyle="normal"
android:layout_width="0dp"
android:layout_weight="5"
android:layout_height="wrap_content"
android:ellipsize="end"
android:maxLines="1"/>
<TextView
android:id="@+id/libraryCreator"
android:textColor="@color/text_openSource"
android:textStyle="normal"
android:layout_width="0dp"
android:layout_weight="2"
android:layout_height="wrap_content"
android:layout_marginTop="2dp"
android:gravity="right"
android:maxLines="2"
android:textSize="@dimen/textSizeSmall_openSource"/>
</LinearLayout>
<View
android:layout_width="match_parent"
android:layout_height="1px"
android:layout_marginTop="4dp"
android:background="@color/dividerLight_openSource"/>
<TextView
android:id="@+id/libraryDescription"
android:textSize="@dimen/textSizeSmall_openSource"
android:textStyle="normal"
android:textColor="@color/text_openSource"
android:padding="8dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:maxLines="20">
</TextView>
<View
android:id="@+id/libraryBottomDivider"
android:layout_width="match_parent"
android:layout_height="1px"
android:layout_marginTop="4dp"
android:background="@color/dividerLight_openSource"/>
<LinearLayout
android:id="@+id/libraryBottomContainer"
android:gravity="center_vertical"
android:paddingLeft="8dp"
android:paddingTop="4dp"
android:paddingRight="8dp"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/libraryVersion"
android:textColor="@color/text_openSource"
android:textStyle="normal"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content"
android:gravity="left"
android:maxLines="1"
android:textSize="@dimen/textSizeSmall_openSource"/>
<TextView
android:id="@+id/libraryLicense"
android:textColor="@color/text_openSource"
android:textStyle="normal"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content"
android:gravity="right"
android:maxLines="1"
android:textSize="@dimen/textSizeSmall_openSource"/>
</LinearLayout>
</LinearLayout>
Et la onClick
est réglé sur 3 parties de cette disposition. libraryCreator
, libraryDescription
, et libraryBottomContainer
.
J'espère que quelqu'un a eu une idée de ce qui se passe ici.
Merci pour votre aide.
Vous devez vous connecter pour publier un commentaire.
En supposant que vous êtes à l'aide de Matériel/Appcompat thème et Lollipop,j'ai eu ce travail en faisant de la CardView avoir les attributs suivants:
android:background
au lieu deandroid:foreground
. Le réglage de ce fait le travail pour moi.android:clickable="true" android:background="?attr/selectableItemBackground"
de Cette façon, l'arrière-plan utilise la valeur par défaut touche sélecteur de pré Sucette appareils et une belle ondulation sur Lollipop et ci-dessus: -)android:foreground="?attr/selectableItemBackground"
utilisera effet de fondu sur la pré-Sucette et d'ondulation sur Lollipop et au-dessus.CardLayout est juste une sous-classe de ViewGroup, Afin de réglage:
devrait faire l'affaire.
Mise à JOUR:
(on dirait que vous essayez d'utiliser une coutume ondulation de la couleur.)
Essayez d'utiliser une ondulation dessinés avec personnalisé couleur que le fond (je n'ai pas utilisé, Donc je ne peux pas vérifier ce comportement.) voir: le la documentation ou ce question pour obtenir vous avez commencé.
android:focusable="true"
etandroid:clickable="true"
.pour moi:
fait enfin travailler.
voir le fond de recyclerView /contenu derrière le point, et aussi de voir l'effet d'entraînement utilisé avec recyclerView.
Aucune des réponses ci-dessus, a travaillé pour moi ou était trop compliqué.
Puis j'ai réalisé que j'avais à définir les propriétés suivantes dans LE RECYCLERVIEW ADAPTATEUR de MISE en page.
Puis je l'ai eu à travailler.
android:clickable="true"
uncesseriliy partout. Il ne doit être en CardView. Puis il travaille.J'étais maintenant en mesure de résoudre le problème.
Le problème est que j'utilise onClickListener sur le TextViews et cela, cliquez auditeur empêche la RippleForeground d'être informé à propos de l'événement tactile. La solution est donc de mettre en œuvre un TouchListener sur ces TextViews et passer à travers l'événement tactile.
La classe est vraiment simple, et peut être utilisé partout:
Il peut être utilisé par l'ajout de ce que TouchListener:
Ce auditeur va juste passer à travers le toucher de l'événement à la CardView et de déclencher le bon effet d'entraînement. (Vous pouvez également le modifier pour prendre n'importe quelle vue. Il ne devrait pas être limitée à un CardView)
older.libraryCreator.setOnTouchListener(rippleForegroundListener);
?Si vous utilisez premier plan arrière-plan, vous n'avez pas besoin d'utiliser cliquables ou focusable
CardView
!Dans mon cas, j'ai été besoin de montrer d'arrière-plan personnalisée et de l'effet d'entraînement en tant que bien. Donc, la façon dont j'ai obtenu c'est par l'application de ces deux attributs sur la racine de la mise en page de mon recycleur-view item:
Eu le même problème que Jiang:
J'ai configurer les attributs à la disposition de fichier, qui est en gonflant le RecycleView.
Mon Principal-Mise en page: (Ne pas ajouter les propriétés ici!)
Mon RecycleViewAdapter:
Mon list_center_item.xml (Ajouter les propriétés ici!)
Vous devez ajouter les lignes suivantes dans la mise en page que vous utilisez sous
CardView
Exemple
@drawable/my_ripple
?Le réel stupide question a été dans mon cas est le suivant....
Techniquement, Ce n'est pas le cas, comme tout le monde suggère ici dans mon cas. Le vrai problème est que vous ne devriez pas utiliser android:cliquable="true" uncesseriliy partout dans le
LayoutView
,RelativeView
ouTextView
.Il ne doit être en CardView. Puis il fonctionne comme un charme
android:focusable="true"
N'est pas vraiment pris.Il suffit d'ajouter les lignes suivantes dans votre CardView
android:clickable="true"
android:foreground="?android:attr/selectableItemBackground"