我的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。
答案 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!