En XML, je fais souvent cela pour émuler onClick
effet:
<Android.support.v7.widget.CardView
Android:id="@+id/cardView"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:foreground="?selectableItemBackground">
...
</Android.support.v7.widget.CardView>
Est-il possible d'accéder à ?selectableItemBackground
en java?
Pour appcompat vous pouvez utiliser,
TypedValue outValue = new TypedValue();
getContext().getTheme().resolveAttribute(Android.R.attr.selectableItemBackground, outValue, true);
cardView.setBackgroundResource(outValue.resourceId);
Pour ceux qui travaillent avec Kotlin, voici quelques fonctions d’extensions à ajouter à Ripple Android Type de vue:
private fun View.addRipple() = with(TypedValue()) {
context.theme.resolveAttribute(Android.R.attr.selectableItemBackground, this, true)
setBackgroundResource(resourceId)
}
private fun View.addCircleRipple() = with(TypedValue()) {
context.theme.resolveAttribute(Android.R.attr.selectableItemBackgroundBorderless, this, true)
setBackgroundResource(resourceId)
}
Je cherchais la même solution. J'ai légèrement changé this répondre pour le rendre plus approprié pour la question posée. Appelez le code suivant à partir de votre constructeur.
private void setClickableAnimation(Context context)
{
TypedValue outValue = new TypedValue();
context.getTheme().resolveAttribute(
Android.R.attr.selectableItemBackground, outValue, true);
setForeground(getDrawable(context, outValue.resourceId));
}
Vous devriez le référencer comme
Android.R.attr.selectableItemBackground
Essayez ci-dessous le code.
int[] attrs = new int[]{R.attr.selectableItemBackground};
TypedArray typedArray = context.obtainStyledAttributes(attrs);
int backgroundResource = typedArray.getResourceId(0, 0);
cardView.setBackgroundResource(backgroundResource);
cardView.setClickable(true);
typedArray.recycle();