recyclerview项目填充不起作用

时间:2017-08-10 02:46:55

标签: android android-recyclerview

我的RecyclerView项目布局:

<ImageView
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#f2f2f2"
    android:scaleType="centerCrop"
    tools:src="@color/black_alpha_60"
    android:padding="10dp"/>

当我将ListView更改为RecyclerView时,我发现Android 4.1.2 Device上缺少填充,但它在Android 7.1上运行良好,我尝试在Java代码中设置填充(onBildViewHolder),如下所示:

        ImageView iv = (ImageView) holder.itemView;
        if (iv.getPaddingLeft() == 0) {
            int p = AppUtils.dp2px(iv.getContext(), 10);
            iv.setPadding(p, p, p, p);
        }

它仍然无效。除了更改填充到保证金之外,是否有任何功能解决方案可以解决所有Android平台设备的问题?谢谢。

PS:RecyclerView版本:25.3.1

更新: 当我向ImageView添加android:cropToPadding =“true”时,iv.setPadding(p,p,p,p)有效。但是更喜欢使用android:padding =“10”来声明填充而不是使用setPadding API。

2 个答案:

答案 0 :(得分:1)

您应该考虑使用ItemDecoration。

class ItemDecoration extends RecyclerView.ItemDecoration {

    private final int mSpace;

    public ItemDecoration(int space) {
        this.mSpace = space;
    }

    @Override
    public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
        // for left and right spacing
        outRect.left = mSpace;
        outRect.right = mSpace;

        outRect.bottom = mSpace;
        // Add top margin only for the first item to avoid double space between items
        if (parent.getChildAdapterPosition(view) == 0) {
            outRect.top = mSpace;
        }
    }
}

然后在您的recyclerview中设置它。

ItemDecoration itemDecoration = new ItemDecoration(20);
recyclerView.addItemDecoration(itemDecoration);

点击此处了解更多详情..

https://developer.android.com/reference/android/support/v7/widget/RecyclerView.ItemDecoration.html

How to add dividers and spaces between items in RecyclerView?

答案 1 :(得分:-2)

不幸的是,版本中存在许多此类问题。我个人处理了一些头痛,涉及android 6.0 aka apk23与Android 7.0及更低版本相比。

您需要在代码中检查版本号,并根据if语句执行不同的操作。请参阅此处以检查代码中的android版本号

编辑:链接错了抱歉,这里已经很晚了......这是正确的。 thanks Alexander!