java - 如何在 RecyclerView 中设置负边距装饰?或者为什么这是不可能的?

标签 java android android-recyclerview decorator

我有一个 RecyclerView。出于图形设计原因,该回收商拥有一个填充物。对于 recyclerview 的某些项目,我不需要这个填充。

所以我的 Intent 是为 itemDecorator 定义负边距,如下所示:

 class MarginDecoration extends RecyclerView.ItemDecoration {
        private int marge_small_border;

        public MarginDecoration(Context context) {
            marge_small_border = context.getResources().getDimensionPixelSize(R.dimen.marge_small_border);
        }

        @Override
        public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
            outRect.set(-marge_small_border, 0, -marge_small_border, 0);
        }
 }

这是行不通的!

编辑:

enter image description here

<强>3。我的需求:(右图)

这是我想做的

<强>1。左图

橙色是容纳 RecyclerView 的 FrameLayout,因此具有水平填充。

我的 RecyclerView,有一个标题,一张图片,然后是按行呈现 2 的项目。

我的要求是: - 让标题填满屏幕(水平尺寸没有填充)=> 在图像/标题级别看不到橙色 - 非标题项之间的每个空间都具有相同的尺寸。

<强>2。我今天的解决方案,带有装饰器

我为 Xdp 的每个项目都添加了一个装饰器 我在 Xdp 的容器框架上放了一个填充 => 我为每个非 header 项目设置了 2Xdp。

现在,我应该删除标题的填充,所以添加一个装饰器 -Xdp。

问题:

怎么做到的?

也欢迎任何其他解决方案。

编辑:

根据item的位置做一个item的装饰器是不太可行的,因为,在列表中,then可以出现label(full with)。 添加减少 block 中项目的数量(标签之间)将使标签前的项目空间无效。

最佳答案

我遇到了类似的问题。我不知道你是否还需要帮助,但我做了以下事情:

  1. 向回收器 View 添加填充

  2. 将回收器 View 的 android:clipToPaddingandroid:clipChildren 标志设置为 false

  3. 向标题项添加负填充,等于给定 RV 的边距

  4. (可选)如果要使中间分隔线和边的大小相等,将一半的填充给列表项,一半给 recyclerView,如上所示

关于java - 如何在 RecyclerView 中设置负边距装饰?或者为什么这是不可能的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34054829/

相关文章:

java - 如何在 Android 中渲染 PDF

java - 带tomcat的eclipse——eclipse修改server.xml

android - 如何在不构建所有 Android 的情况下构建 AOSP 应用程序?

java - 差异Recycleview : set color in CreateView or BindView

java - 为什么我不能将 lambda 分配给未类型化的谓词引用?但是可以为它分配一个初始化的类型谓词引用吗?

java.lang.ClassNotFoundException : A 异常

android - 不推荐使用 PictureListener 和 onNewPicture() - 替代方案?

Android:如何将单选按钮设置为 'grey out'

android - 使用 Dagger2 将适配器注入(inject) fragment

android - 如果适配器的数据通过 RxAndroid 设置,则 RecyclerView 在返回导航后滚动到顶部