2017-04-11 1 views
0

요소가 4 개의 열로 표시되어야하는 RecyclerView가 있습니다.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> 

그래서 수정 한 높이와 너비를 아래와 같이 나는 GridLayoutManager를 통해이 작업을 수행.

정상적인 큰 화면에서는 올바르게 표시되지만 작은 화면에서는 열이 서로 겹칩니다. 내가 지정할 수있는 방법이 있습니까? 일반적으로 큰 화면에서 4 개의 열을 선택해야하지만 작은 화면에서는 어떻게 든 감싸고 겹치지 않아야합니까?

답변

0

당신은 대형 스크린의 경우 화면 sizes.Refer이 link

에 따라 레이아웃을 정의 할 수 있습니다, 당신은 고해상도/레이아웃/레이아웃 대형 및 고해상도/레이아웃의 작은 것들에 대한 레이아웃을 정의 할 수 있습니다.

+0

에 넣습니다. 그것은 열이 열 수를 재현하는 것보다 겹치는 경우입니다. – 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)); 

예 내가 같은 xxxhdpi 또는 xxhdpi 등으로 폴더를 사용하여 정의 할 수 있다는 사실을 알고하지만 눈에 보이는 maxColumns에 대한 몇 가지 자동 방법을 원하는 dimens.xml

<dimen name="spacing">2dp</dimen> 
관련 문제