android - recyclerview - grid layout and cardview
Programar programáticamente ''? SelectableItemBackground'' en la vista de Android (5)
¡Ah allí! Para aquellos que trabajan con Kotlin, aquí hay algunas funciones de extensiones para agregar Ripple en el tipo de Vista de Android:
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();
En xml, a menudo hago esto para emular el efecto onClick
:
<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>
¿Hay alguna forma de acceder ?selectableItemBackground
en java?
Deberías referenciarlo como
android.R.attr.selectableItemBackground
Estaba buscando la misma solución. Cambié ligeramente this respuesta para que sea más adecuada para la pregunta formulada. Llame al siguiente código de su constructor.
private void setClickableAnimation(Context context)
{
TypedValue outValue = new TypedValue();
context.getTheme().resolveAttribute(
android.R.attr.selectableItemBackground, outValue, true);
setForeground(getDrawable(context, outValue.resourceId));
}
Intenta debajo del código.
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)
}
Para appcompat puedes usar,
TypedValue outValue = new TypedValue();
getContext().getTheme().resolveAttribute(android.R.attr.selectableItemBackground, outValue, true);
cardView.setBackgroundResource(outValue.resourceId);