android - setBackgroundResource 的行为不同于 setBackground with RippleDrawable

标签 android rippledrawable

我正在尝试将 RippleDrawable 设置为 ListView 行的背景。 使用 view.setBackgroundResource(R.drawable.ripple) 时一切正常。 尝试时

view.setBackground(view.getContext().getDrawable(R.drawable.ripple))

它可以工作,但是当快速触摸该项目时不会显示波纹(我也有该项目的激活/选中状态),只有当我按住 View 时它才会出现。

View 类中的 setBackgroundResource 方法如下所示:

if (resid != 0 && resid == mBackgroundResource) {
    return;
}

Drawable d = null;
if (resid != 0) {
    d = mContext.getDrawable(resid);
}
setBackground(d);

mBackgroundResource = resid;

所以基本上就是我想手动做的事情。

注意:我想使用 setBackground 方法,因为我想以编程方式创建 RippleDrawable。

有人知道为什么会这样吗?

最佳答案

不是在 View 行上设置波纹,而是使用 listSelector 属性在 ListView 上设置它:

<ListView
    ...
    android:listSelector="@drawable/ripple" />

以编程方式,您可以使用 mListView.setSelector(...) 进行设置。

关于android - setBackgroundResource 的行为不同于 setBackground with RippleDrawable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32813279/

相关文章:

android - 将参数从 Activity 传递到 BroadcastReceiver

android - Android 中的 EditText 小部件

android - 使用包含另一种背景颜色的项目在 RecyclerView 中获得波纹效果

android - 涟漪效应不会超过 ImageView

android - 'boolean android.support.v7.widget.RecyclerView$LayoutManager.canScrollHorizontally()' 上的 RecyclerView + ViewPager NullPointerException

android - 在关闭的应用程序中收到通知时转到特定 Activity ?

java - Android fragment 中句柄为 0xa1c126d0 的 0xa2ee7500 (RippleDrawable) 上的 endAllActiveAnimators

java - 如何将按钮链接到微调器?

android - 如何在android中的首选项中添加涟漪效应?