2017-08-10 67 views
0

我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的设备,但它运作良好,在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

更新: 的iv.setPadding(P,P,P,P)的作品时,我想补充的android:cropToPadding = “true” 添加到ImageView的。但宁愿使用android:padding =“10”来声明填充比使用setPadding API。

回答

-2

不幸的是,许多这样的问题存在于各个版本中。我个人处理一系列涉及Android 6.0 aka apk23与android 7.0和更低版本相比的头痛。

您需要检查代码中的版本号并根据if语句做不同的行为。在这里查看代码中的Android版本号

编辑:链接是错的抱歉它迟到了......这里是正确的。 Retrieving Android API version programmatically

+0

绝对是误导性的链接。提供的链接给出了自己的应用程序的版本号,而提供的答案表明Android版本将被检查(虽然这本身并不是正确的答案) –

+0

哦,我的坏我会修复链接。虽然我确实回答了这个问题,但并不确定是否需要downvote。他问如何在所有版本的Android上工作,我的解决方案就是这样做的。我每天在代码中使用它 – Bqin1

+0

我更喜欢在xml布局中设置“android:padding”的填充。 –

0

您应该考虑使用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?

+0

可选的解决方案,但它必须为每个页面编码RecyclerView.ItemDecoration。每个页面中的分隔符相同,但每个页面的项目填充不总是相同。 –

+0

对,你不必为每个页面进行硬编码。您可以在构造函数中使用布尔值或其他值来指定是否需要空格和分隔符。这是装饰回收商意见的推荐方式。 – Ritesh

+0

那么,但如何控制水平填充? –