2017-04-11 37 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> 
相關問題