将 selectableItemBackground 添加到 CardView
Add selectableItemBackground to CardView
我想将 CardView 的前景设置为 ?attr/selectableItemBackground
。
当我在 xml 中声明前景时它起作用了:
android:foreground="?attr/selectableItemBackground"
但我想以编程方式设置前景。这不起作用:
int[] attrs = new int[]{R.attr.color_a, R.attr.selectableItemBackground};
TypedArray ta = context.obtainStyledAttributes(attrs);
mColorA = ta.getColor(0, 0);
mSelectableItemBackground = ContextCompat.getDrawable(context, ta.getResourceId(1, 0));
ta.recycle();
...
cardView.setOnClickListener(onClickListener);
cardView.setClickable(true);
cardView.setForeground(mSelectableItemBackground);
但是,检索属性有效(mSelectableItemBackground 包含一个 RippleDrawable
),但是当我按下卡片时前景没有改变。
问题是我对多张卡片使用了同一个 Drawable。
您必须为每张卡片检索一个新的 Drawable。
this answer 中有更多详细信息。
我想将 CardView 的前景设置为 ?attr/selectableItemBackground
。
当我在 xml 中声明前景时它起作用了:
android:foreground="?attr/selectableItemBackground"
但我想以编程方式设置前景。这不起作用:
int[] attrs = new int[]{R.attr.color_a, R.attr.selectableItemBackground};
TypedArray ta = context.obtainStyledAttributes(attrs);
mColorA = ta.getColor(0, 0);
mSelectableItemBackground = ContextCompat.getDrawable(context, ta.getResourceId(1, 0));
ta.recycle();
...
cardView.setOnClickListener(onClickListener);
cardView.setClickable(true);
cardView.setForeground(mSelectableItemBackground);
但是,检索属性有效(mSelectableItemBackground 包含一个 RippleDrawable
),但是当我按下卡片时前景没有改变。
问题是我对多张卡片使用了同一个 Drawable。
您必须为每张卡片检索一个新的 Drawable。
this answer 中有更多详细信息。