9

Ho una semplice listview per la quale ho definito un drawable personalizzato per il divisore. Ho definito l'altezza del divisore da 1p. La listview è all'interno di un frammento.Il divisore di ListView non viene visualizzato in Android 5

<shape 
    android:shape="line" > 
    <stroke 
     android:color="@color/custom_color" /> 

    <gradient android:height="1dp" /> 

</shape> 

E le grandi opere per tutte le versioni di Android, tranne L.

Tutto ciò che mi manca?

+0

Vorrei provare a "2dp", ma altrimenti non ho idea di cosa potrebbe mancare. –

+0

Ho provato anche 4dp. Non ha aiutato – sr09

+0

listview.setdivider (R.drawable.line); – deepak825

risposta

9

Si consiglia di utilizzare android:shape="rectangle" invece di android:shape="line" per farlo funzionare su ogni versione di Android ... (cambiarne anche stroke a solid)

<shape 
    android:shape="rectangle" > 
    <solid android:color="@color/custom_color" /> 
    <gradient android:height="1dp" /> 
</shape> 

Buon divertimento!

5

risposta aggiornato

Dopo ulteriori test risulta che i divisori vengono visualizzate solo se l'altezza del divisore è strettamente minore quella dividerHeight impostata per il ListView. Per esempio:

custom_divider.xml (Si noti che l'altezza divisorio è specificato da android:width)

<shape xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="line" > 
    <stroke 
     android:width="1dp" 
     android:color="$ffff0000" /> 
</shape> 

layout xml

<ListView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:id="@+id/listView" 
    android:divider="@drawable/custom_divider" 
    android:dividerHeight="2dp"/> 

... funzionerà. Ma questo non lo farà:

custom_divider.xml (Si noti che l'altezza divisorio è specificato da android:width)

<shape xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="line" > 
    <stroke 
     android:width="1dp" 
     android:color="$ffff0000" /> 
</shape> 

layout xml

<ListView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:id="@+id/listView" 
    android:divider="@drawable/custom_divider" 
    android:dividerHeight="1dp"/> 

La mia ipotesi è che Google ha incasinato l'ottimizzazione per disegnare i divisori Listview e semplicemente non li disegna se non c'è abbastanza spazio

Original post

Sembra che è necessario sia per impostare il dividerHeight sul ListView e la corsa width del drawable divisorio per questo al lavoro su Android 5.

Esempio:

custom_divider.xml

<shape xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="line" > 
    <stroke 
     android:width="10dp" 
     android:color="$ffff0000" /> 

    <gradient android:height="1dp" /> 
</shape> 

layout xml

<ListView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:id="@+id/listView" 
    android:divider="@drawable/custom_divider" 
    android:dividerHeight="20dp"/> 
+0

Grazie per la soluzione !! –

7

In ogni caso, l'elemento della lista disabilitato tramite override isEnabled() restituisce falso? C'è un cambiamento (bug?) In Android L che fa sì che i divisori degli elementi della lista siano nascosti se un elemento è disabilitato. Mi sono imbattuto in questo stesso problema, i miei divisori di lista funzionavano in tutto tranne che in L, e questa risultò essere la causa.

Qui ci sono alcuni più messaggi in cui questo è stato discusso, così come un problema aperto con Google:

Commenti qui: Disappearing divider in ListView when ArrayAdapter.isEnabled returns false

How to add dividers between disabled items in ListView? - Lollipop

https://code.google.com/p/android/issues/detail?id=83055

Se questa è la Nel caso, sembra che potrebbe essere necessario disegnare manualmente il divisore con una vista personalizzata e impostare il divisore su null nell'elenco. Proverò lo stesso.

+0

Sì, è un bug che si vede anche in lollipop –

1

L'attributo di altezza non è una proprietà sotto il tag del gradiente. Usa la dimensione attr come sotto.

<shape xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="rectangle" > 

    <solid android:color="@android:color/holo_blue_dark" /> 

    <size android:height="1px" /> 

</shape> 
Problemi correlati