web-dev-qa-db-ja.com

Android viewで '?selectableItemBackground'をプログラムで設定します

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にアクセスする方法はありますか?

48
Hendra Anggrian

appcompatでは、使用できますが、

TypedValue outValue = new TypedValue();
getContext().getTheme().resolveAttribute(Android.R.attr.selectableItemBackground, outValue, true);
cardView.setBackgroundResource(outValue.resourceId);
114
Amit Vaghela

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)
}
16

私は同じ解決策を探していました。 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));
}
6
Wirling

あなたはそれを参照する必要があります

Android.R.attr.selectableItemBackground

5
vanomart

以下のコードを試してください。

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();
0
Hardik Trivedi