2017-04-11 111 views
0

我有一个RecyclerView,其元素需要显示在4列。我通过GridLayoutManager做到这一点,如下图所示:RecyclerView的GridLayoutManager - 行在较短的屏幕上重叠

mActivityBinding.bwRv.setAdapter(mAdapter); 
    GridLayoutManager gridLayoutManager = new GridLayoutManager(MysActivityTwo.this, 4); 
    mActivityBinding.bwRv.setLayoutManager(gridLayoutManager); 

用我个人的项目布局,如下图所示:

<android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:card_view="http://schemas.android.com/apk/res-auto" 
    android:layout_width="@dimen/bw_items_width" 
    android:layout_height="100dp" 
    android:layout_alignEnd="@+id/bw_et_questions" 
    android:layout_alignStart="@+id/bw_et_questions" 
    android:layout_below="@+id/bw_et_questions" 
    android:clickable="true" 
    android:foreground="?android:attr/selectableItemBackground" 
    card_view:cardCornerRadius="2dp" 
    app:optCardBackgroundColor="@color/dark_font" 
    card_view:cardElevation="2dp"> 
</android.support.v7.widget.CardView> 

所以它有固定的高度和宽度。

它在正常大屏幕中正确显示,但在较小的屏幕中,列彼此重叠。有什么方法可以指定:通常在较大的屏幕上应该选择4列,但是在较小的屏幕中,它应该以某种方式包裹并且不重叠?

回答

0

您可以定义根据屏幕sizes.Refer这个link

对于大屏幕的布局,您可以定义在res /布局/布局大和在res /布局小的布局。

+0

是的,我知道我可以如xxxhdpi或xxhdpi等使用的文件夹定义,但我要为maxColumns可见一些自动的方式。这是如果列重叠比收到列数。 – Tarun

+0

您可以在定义layoutManager之前检查屏幕宽度,并相应地定义列数。 – fightingCoder

0

使用此代码来分离Gridview的项目。创建间距的类

import android.graphics.Rect; 
import android.support.v7.widget.RecyclerView; 
import android.view.View; 
public class SpacesItemDecoration extends RecyclerView.ItemDecoration { 
private int space; 
public SpacesItemDecoration(int space) { 
    this.space = space; 
} 

@Override 
public void getItemOffsets(Rect outRect, View view, 
          RecyclerView parent, RecyclerView.State state) { 
    outRect.left = space; 
    outRect.right = space; 
    outRect.bottom = space; 

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

并将其设置在您的RecyclerView上。

int spacingInPixels = getResources().getDimensionPixelSize(R.dimen.spacing); 
    recyclerView.addItemDecoration(new SpacesItemDecoration(spacingInPixels)); 

把它放在dimens.xml

<dimen name="spacing">2dp</dimen> 
相关问题