2015-07-30 11 views
9

Nella mia app sto implementando RecyclerView per mostrare un elenco di cose. Sul mio LG Nexus 5 (Android 5.1 M), se imposto il target sdk a 16 o 17 (fondamentalmente per simulare ciò che accade su quei telefoni con api 16, 17) la mia altezza di riga della lista cambia drasticamente.Problema dell'altezza RecyclerView in API 17 e API 16 - Android

Tuttavia, questo non si verifica su API 18 o 18+. Non riesco davvero a capire perché questo accada e quale sia l'approccio ottimale per affrontare questo problema.

Un'altra cosa: Io uso un ImageView all'interno della riga di elenco. Questo sta accadendo quando nel mio ImageView sto caricando le immagini dal server. Io uso la libreria ImageLoader per farlo. Tuttavia, se io uso le immagini statiche, quindi non ho questo problema

+1

in modo che nessuno ha riscontrato questo problema prima? – stud91

+1

Puoi incollare il layout xml della riga? – lgvalle

+0

Per favore incolla anche il tuo style.xml –

risposta

4

"se uso le immagini statiche, quindi non ho questo problema" Quando si usano le immagini statiche, vengono caricati durante onLayout() per il vostro ImageView . Quando l'immagine viene caricata durante il layout, influisce sulle dimensioni misurate nel passaggio onMeasure().

Quando l'immagine non è impostata staticamente (cioè trascinata su rete asincrona), lo ImageView non può fare affidamento sulla dimensione dell'immagine per determinarne le dimensioni misurate. Quando l'immagine viene caricata, verrà ridotta per adattarsi al valore misurato esistente ImageView.

Solutions:

  • specificare un minHeight sul ImageView o riga di layout
  • o specificare un'altezza fissa sul ImageView o riga di layout

Se sai cosa dimensioni desiderate per la tua fila, dovresti usare l'altezza fissa.

Esistono stili predefiniti per RecyclerView che possono impostare attributi come minHeight per il layout della riga che può variare tra le versioni dell'API. Pertanto, senza impostare esplicitamente un valore fisso o minHeight, è possibile visualizzare un comportamento diverso tra le versioni dell'API.

+1

Nota: c'è un problema noto con minHeight su RecyclerView: https://code.google.com/p/android/issues/detail?id=74772 –

1

Ho anche problemi con l'altezza di recyclerView quindi ho trovato una soluzione. Dare l'altezza dal codice java. Per me funziona.

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