3

nicht gestaffelt Ich entwickle eine Android-App. Ich bin nicht gut in der Android-Entwicklung. In meiner App verwende ich RecyclerView und CardView mit StaggeredGridLayoutManager. Weil ich möchte, dass jede Zellengröße in der Liste unterschiedlich ist und wie in der unteren Abbildung versetzt ist.Zellen sind bei Verwendung von RecyclerView mit StaggeredGridLayoutManager in Android

enter image description here

Aber wenn ich meine app laufen, werden die Zellen nicht versetzt und sie sind einander gleich groß.

Dies ist Screenshot

enter image description here

Diese XML meine Recycler Ansicht

<android.support.v7.widget.RecyclerView 
     android:id="@+id/df_rv_destination" 
     android:scrollbars="vertical" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content"/> 

für Zell Artikel

<?xml version="1.0" encoding="utf-8"?> 
<android.support.v7.widget.CardView xmlns:card_view="http://schemas.android.com/apk/res-auto" 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content"> 

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"> 

     <ImageView 
      android:id="@+id/di_iv_image" 
      android:scaleType="centerCrop" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" /> 

     <TextView 
      android:textSize="17dp" 
      android:textColor="@color/white" 
      android:layout_marginLeft="10dp" 
      android:layout_marginRight="10dp" 
      android:layout_marginBottom="10dp" 
      android:layout_alignParentLeft="true" 
      android:layout_alignParentBottom="true" 
      android:id="@+id/di_tv_name" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" /> 
    </RelativeLayout> 
</android.support.v7.widget.CardView> 

mit diesem ist XML Dies ist, wie ich meine RecyclerView konfigurieren StaggerGridLayoutManager

 StaggeredGridLayoutManager staggeredGridLayoutManager = new StaggeredGridLayoutManager(2, 1); 
     rcDestinations.setLayoutManager(staggeredGridLayoutManager); 
     rcDestinations.setItemAnimator(new DefaultItemAnimator()); 
     regionsList = new ArrayList<Region>(); 
     destinationsAdapter = new DestinationsAdapter(getActivity(),regionsList); 
     rcDestinations.setAdapter(destinationsAdapter); 

Warum ist mein RecyclerView nicht gestaffelt? Wie kann ich es reparieren?

Antwort

1

Ihre Zelle Artikel alle die gleiche Größe bekommen, weil es nichts gibt, Größe ändern würde ... Ich denke, man größere Gegenstände bekommen, wenn Sie größere Bilder bekam

Zunächst einmal ändern diese:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

dazu:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content"> 

dann statt:

<ImageView 
     android:id="@+id/di_iv_image" 
     android:scaleType="centerCrop" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" /> 

Versuch:

<ImageView 
     android:id="@+id/di_iv_image" 
     android:scaleType="center" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" /> 

und die Bilder Höhe zu Ihrem gewünschten Größe skalieren, bevor sie hinzugefügt;) mit cropCenter Sie immer die Bilder bekommen abgeschnitten auf die gleiche Größe

+0

Wenn ich Image scaleType in die Mitte stellen, wird die Bildbreite nicht mit der Zellenbreite übereinstimmen. Die Ausrichtung wird nicht korrekt sein. Vor allem mit Texten. –

+0

Ja, das stimmt, aber Sie müssen mindestens die Höhe des Bildes skalieren, bevor Sie es zum imageView hinzufügen. Können Sie mir den Teil des Codes zeigen, in dem Sie die Bilder hinzufügen? – 666

+0

Nichts besonderes. Ich stelle das Bild einfach direkt mit Picasso ein. Keine Änderung. –

1

stellen Sie Ihren Bildansicht mit android:adjustViewBounds="true"

+0

Dies liefert keine Antwort auf die Frage. Sobald Sie genügend [Reputation] (http://stackoverflow.com/help/whats-reputation) haben, können Sie [jeden Beitrag kommentieren] (http://stackoverflow.com/help/privileges/comment); stattdessen [geben Sie Antworten, die keine Klärung durch den Fragesteller erfordern] (http://meta.stackexchange.com/questions/214173/why-doe-i-need-50-reputation-to-comment-what-can- i-do-stattdessen). - [Aus Bewertung] (/ review/low-quality-posts/14080377) –

+0

Danke für die Klarstellung @MoralesBatovski – Chenmin

-1

Sie müssen die Größenänderung der Höhe erzwingen, um den gewünschten Effekt zu erzielen.

I Daten verwenden Bindung so wurde ein Satz der Höhe so:

public int getHeight(int position) { 
    Random r = new Random(); 
    int randomHeight = r.nextInt(Math.abs(mRecyclerViewHeight)/9) + Math.abs(mRecyclerViewHeight)/4; 
    if(position%2 == 0){ 
     randomHeight += Math.abs(mRecyclerViewHeight)/9; 
    } 
    return randomHeight; 
} 

@Override 
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { 


     ((DiscoveryViewHolder) holder).bindRepository(mPostList.get(position), getHeight(position)); 

Halter) .bindRepository (mPostList.get (Position)); }

+0

Was ist mRecyclerViewHeight Wert oder wie bekomme ich es? – blackjack

+0

Sorry für späte Antwort. mRecyclerViewHeight ist die höchste Komponente der Recycleransicht in Ihrem Layout. –