2017-04-11 3 views
0

Ich habe eine RecyclerView, deren Elemente in 4 Spalten angezeigt werden müssen. Ich tue dies über GridLayoutManager wie unten dargestellt:RecyclerViews GridLayoutManager - Zeilen Überlappung auf kürzeren Bildschirmen

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

Mit meiner Einzelposition Layout wie unten dargestellt:

<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> 

So hat es feste Höhe und Breite.

Es wird korrekt in normalen größeren Bildschirmen angezeigt, aber in kleineren Bildschirm, Spalten überlappen sich gegenseitig. Gibt es eine Möglichkeit, dass ich angeben kann, dass normalerweise in größeren Bildschirmen 4 Spalten aufgenommen werden sollten, aber in kleineren Bildschirmen sollte es sich irgendwie umwickeln und nicht überlappen?

Antwort

0

Sie können Layouts diese link

Für große Bildschirme basieren auf dem Bildschirm sizes.Refer definieren, können Sie ein Layout in res/Layout/Layout-große und für kleine in res/Layout definieren.

+0

Ja, ich weiß, dass ich Ordner mit wie xxxhdpi definieren können oder xxhdpi usw. Aber ich möchte eine automatische Art und Weise für maxColumns sichtbar. Das heißt, wenn sich Spalten überschneiden, wird die Anzahl der Spalten erhöht. – Tarun

+0

Sie können vor dem Definieren des LayoutManagers nach der Bildschirmbreite suchen und die Anzahl der Spalten entsprechend definieren. – fightingCoder

0

Verwenden Sie diesen Code, um Elemente von Gridview zu trennen. Erstellen Sie eine Klasse für Abstand

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; 
    } 
}} 

Und setzen Sie es auf Ihrem RecyclerView.

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

Legen Sie es auf dimens.xml

<dimen name="spacing">2dp</dimen> 
Verwandte Themen