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); ... }
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/220391.html原文链接:https://javaforall.net
