Xmlでは、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>
Javaで?selectableItemBackground
にアクセスする方法はありますか?
appcompatでは、使用できますが、
TypedValue outValue = new TypedValue();
getContext().getTheme().resolveAttribute(Android.R.attr.selectableItemBackground, outValue, true);
cardView.setBackgroundResource(outValue.resourceId);
Kotlinを使用するユーザー向けに、Ripple on Android View type:
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)
}
私は同じ解決策を探していました。 this answerを少し変更して、質問にさらに適したものにしました。コンストラクターから次のコードを呼び出します。
private void setClickableAnimation(Context context)
{
TypedValue outValue = new TypedValue();
context.getTheme().resolveAttribute(
Android.R.attr.selectableItemBackground, outValue, true);
setForeground(getDrawable(context, outValue.resourceId));
}
あなたはそれを参照する必要があります
Android.R.attr.selectableItemBackground
以下のコードを試してください。
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();