RecyclerView粘性头部控件Github:timehop/sticky-headers-recyclerview
当RecycleView被SmartRefreshLayout嵌套时,会造成Header设置的背景不显示,调试源码发现在HeaderViewCache中有计算Header的宽度
....
int widthSpec;
int heightSpec;
if (mOrientationProvider.getOrientation(parent) == LinearLayoutManager.VERTICAL) {
// 这里parent.getWidth()获取不到宽度
widthSpec = View.MeasureSpec.makeMeasureSpec(parent.getWidth(), View.MeasureSpec.EXACTLY);
heightSpec = View.MeasureSpec.makeMeasureSpec(parent.getHeight(), View.MeasureSpec.UNSPECIFIED);
} else {
widthSpec = View.MeasureSpec.makeMeasureSpec(parent.getWidth(), View.MeasureSpec.UNSPECIFIED);
heightSpec = View.MeasureSpec.makeMeasureSpec(parent.getHeight(), View.MeasureSpec.EXACTLY);
}
int childWidth = ViewGroup.getChildMeasureSpec(widthSpec,
parent.getPaddingLeft() + parent.getPaddingRight(), header.getLayoutParams().width);
int childHeight = ViewGroup.getChildMeasureSpec(heightSpec,
parent.getPaddingTop() + parent.getPaddingBottom(), header.getLayoutParams().height);
header.measure(childWidth, childHeight);
....
注释的地方获取不到宽度,所以在自定义的Adapter中重新设置一下宽度
@Override
public ViewHolder onCreateHeaderViewHolder(ViewGroup parent) {
....
// 这个粘性头部库Header宽度计算的有问题,会导致背景显示不出来,这里重新设置一下
RecyclerView.LayoutParams p = (RecyclerView.LayoutParams) view.getLayoutParams();
p.width = DensityUtil.getScreenWidth(mContext);
view.setLayoutParams(p);
...
}
今天的文章RecyclerView粘性头部控件 – sticky-headers-recyclerview,Header背景不显示分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/6674.html