gpt4 book ai didi

android - 在 RecyclerView 开头添加 DividerItemDecoration 效果

转载 作者:行者123 更新时间:2023-12-04 16:30:26 25 4
gpt4 key购买 nike

我有一个布局,它由 TextView 和布局顶部的帮助文本组成,然后是 RecyclerView 和相关项目。

我在 RecyclerView 中添加了一个 DividerItemDecoration,但它只划分(我知道,这就是它的名字)元素,而不是 RecyclerView 的第一个元素的辅助 TextView。

有没有办法以任何方式扩展 DividerItemDecoration,或者我需要在 TextView 和 RecyclerView 之间放置一个带背景的空 View 元素?

最佳答案

使用内置 DividerItemDecoration 无法做你想做的事类(class)。

分隔线是分两步绘制的。一、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 是根据每个 subview 的底部边缘计算的。

当然,您可以创建自己的 RecyclerView.ItemDecoration 实现。 , 并为列表中的第一项创建一个特殊情况。

编辑 : 这是一个精简和简化的 ItemDecoration这是基于 DividerItemDecoration但还在第一项顶部画了一个分隔线: https://gist.github.com/zizibaloob/0c6be3e1318257950507e9c614c8aa70

关于android - 在 RecyclerView 开头添加 DividerItemDecoration 效果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47778105/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com