我的布局包含一个TextView,在布局顶部有一个帮助文本,后跟一个包含相关项的RecyclerView。
我在RecyclerView中添加了一个DividerItemDecoration,但它只划分(我知道,这就是它的名字)元素,而不是来自RecyclerView的第一个元素的帮助器TextView。
有没有办法以任何方式扩展DividerItemDecoration,或者我需要在TextView和RecyclerView之间放置一个带有背景的空View元素?
答案 0 :(得分:1)
使用内置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
drawable的垂直边界是根据每个子视图的下边缘计算的。
当然,您可以创建自己的RecyclerView.ItemDecoration
实现,并为列表中的第一项创建一个特殊情况。
修改:这是一个基于ItemDecoration
的精简版DividerItemDecoration
,但也会在第一个项目的顶部绘制一个分隔符:https://gist.github.com/zizibaloob/0c6be3e1318257950507e9c614c8aa70
答案 1 :(得分:0)
您可以使用xml中的View来分割recyclelerView和TextView,如下所示:
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="@color/colorPrimary" />