2015-07-30 15 views
9

Ich implementiere RecyclerView in meiner App, um eine Liste von Sachen zu zeigen. Wenn ich auf meinem LG Nexus 5 (Android 5.1 M) den Ziel-SDK auf 16 oder 17 setze (um zu simulieren, was auf diesen Telefonen mit API 16, 17 passiert), ändert sich meine Zeilenhöhe der Liste dramatisch.RecyclerView Höhe Problem in API 17 und API 16 - Android

Dies tritt jedoch bei API 18 oder 18+ nicht auf. Ich kann nicht wirklich herausfinden, warum das passiert und was ist der optimale Ansatz, um dieses Problem anzugehen.

Eine weitere Sache: Ich benutze eine ImageView innerhalb der Liste Zeile. Dies geschieht, wenn ich in meinem ImageView die Bilder vom Server lade. Ich benutze ImageLoader Bibliothek, um dies zu tun. Allerdings habe ich, wenn ich statische Bilder verwenden, dann dieses Problem nicht

+1

so hat niemand vor diesem Problem gestoßen? – stud91

+1

Können Sie Ihr Zeilen-XML-Layout einfügen? – lgvalle

+0

Bitte fügen Sie auch Ihre style.xml ein –

Antwort

4

„wenn ich statische Bilder verwenden, dann habe ich dieses Problem nicht“ Wenn statische Bilder verwenden, werden sie während onLayout() für Ihre ImageView geladen in . Wenn das Bild während des Layouts geladen wird, beeinflusst es die gemessene Größe im onMeasure() Pass.

Wenn das Bild nicht statisch eingestellt ist (d. H. Über Netzwerk Async gezogen), kann sich das ImageView nicht auf die Größe des Bildes verlassen, um seine gemessene Größe zu bestimmen. Wenn das Bild geladen ist, wird es geschrumpft, um in das vorhandene gemessene ImageView zu passen.

Lösungen:

  • Geben Sie einen minHeight auf ImageView oder Zeilen Layout
  • oder einer festen Höhe auf Ihrer ImageView oder Zeile Layout angeben

Wenn Sie wissen, welche Größe Sie wünschen Für Ihre Reihe sollten Sie die feste Höhe verwenden.

Es gibt Standardstile für RecyclerView, die Attribute wie minHeight für Ihr Zeilenlayout festlegen können, die über API-Versionen variieren können. Wenn Sie also nicht explizit ein festes oder minHeight selbst festlegen, können Sie unterschiedliches Verhalten in den API-Versionen sehen.

+1

Hinweis: Es gibt ein bekanntes Problem mit minHeight auf RecyclerView: https://code.google.com/p/android/issues/detail?id=74772 –

1

Ich habe auch ein Problem mit der Höhe von RecyclerView so eine Lösung gefunden. Gib Höhe aus Java-Code. Für mich geht das.

recyclerView.getViewTreeObserver().addOnGlobalLayoutListener(
 
    new OnGlobalLayoutListener() { 
 
\t @Override 
 
\t public void onGlobalLayout() { 
 
\t // TODO Auto-generated method stub 
 
\t 
 
     //use your layout 
 
recyclerTagScroll.getViewTreeObserver().removeGlobalOnLayoutListener(this); 
 

 
\t \t RelativeLayout.LayoutParams params = (android.widget.RelativeLayout.LayoutParams) recyclerTagScroll 
 
\t \t \t \t \t .getLayoutParams(); 
 

 
\t \t params.height = recyclerTagScroll.getChildAt(0).getHeight(); 
 
\t \t recyclerTagScroll.setLayoutParams(params); 
 
\t } 
 
});

Verwandte Themen