首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用RippleDrawable时,setBackgroundResource与setBackground的行为不同

使用RippleDrawable时,setBackgroundResource与setBackground的行为不同
EN

Stack Overflow用户
提问于 2015-09-28 05:58:51
回答 2查看 621关注 0票数 5

我正在尝试将RippleDrawable设置为列表视图行的背景。使用view.setBackgroundResource(R.drawable.ripple)时,一切工作正常。在尝试的时候

代码语言:javascript
复制
view.setBackground(view.getContext().getDrawable(R.drawable.ripple))

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

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

代码语言:javascript
复制
if (resid != 0 && resid == mBackgroundResource) {
    return;
}

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

mBackgroundResource = resid;

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

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

有谁知道为什么会发生这种事吗?

EN

回答 2

Stack Overflow用户

发布于 2015-09-30 21:00:31

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

代码语言:javascript
复制
<ListView
    ...
    android:listSelector="@drawable/ripple" />

通过编程方式,您可以使用mListView.setSelector(...)设置它。

票数 1
EN

Stack Overflow用户

发布于 2015-10-06 20:37:46

View.requestLayout();一起调用View.invalidate();

CompoundButton函数setChecked(boolean)在使用时会使View无效,因此要求View重新检查自身,然后重新绘制或布局

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32813279

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档