[英]Add DividerItemDecoration effect in the begining of RecyclerView
我有一个布局,该布局包含一个TextView和一个带有相关项目的RecyclerView,该TextView在布局的顶部带有辅助文本。
我在RecyclerView中添加了DividerItemDecoration,但它仅对元素进行划分(我知道,这就是它的名字),但不对RecyclerView的第一个元素进行辅助TextView。
有没有办法以任何方式扩展DividerItemDecoration,或者我需要在TextView和RecyclerView之间放置一个带有背景的空View元素?
使用内置的DividerItemDecoration
类无法执行DividerItemDecoration
。
分压器是通过两步过程绘制的。 首先,使用getItemOffsets()
在RecyclerView
的每个项目的底部添加空间。 然后,使用onDraw()
在该空间内绘制分隔线。
看一下源代码:
@Override
public void getItemOffsets(Rect outRect, View view, RecyclerView parent,
RecyclerView.State state) {
...
if (mOrientation == VERTICAL) {
outRect.set(0, 0, 0, mDivider.getIntrinsicHeight());
} else {
outRect.set(0, 0, mDivider.getIntrinsicWidth(), 0);
}
}
在这里您可以看到空间仅添加到每个项目的底部 (或在水平模式下为右侧)。 对于第一个项目也没有特殊情况,也要给它一个最高偏移量。
private void drawVertical(Canvas canvas, RecyclerView parent) {
...
final int childCount = parent.getChildCount();
for (int i = 0; i < childCount; i++) {
final View child = parent.getChildAt(i);
parent.getDecoratedBoundsWithMargins(child, mBounds);
final int bottom = mBounds.bottom + Math.round(child.getTranslationY());
final int top = bottom - mDivider.getIntrinsicHeight();
mDivider.setBounds(left, top, right, bottom);
mDivider.draw(canvas);
}
...
}
在这里,您可以看到mDivider
可绘制对象的垂直边界是根据每个子视图的底部边缘计算的。
当然,您可以创建自己的RecyclerView.ItemDecoration
实现,并为列表中的第一项创建特殊情况。
编辑 :这是一个基于DividerItemDecoration
简化精简ItemDecoration
,但还在第一个项目的顶部绘制了分隔线: https : DividerItemDecoration
您可以在XML中使用View来划分recyclerView和TextView,如下所示:
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="@color/colorPrimary" />
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.