9

Mam prosty listview, dla którego zdefiniowałem niestandardowy ciąg do dzielenia. Zdefiniowałem wysokość dzielnika jako 1dp. Listview znajduje się w obrębie fragmentu.Rozdzielacz ListView nie jest wyświetlany w systemie Android 5

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

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

</shape> 

Działa świetnie dla wszystkich wersji Androida z wyjątkiem L.

Wszystko mi brakuje?

+0

Chciałbym spróbować "2dp", ale poza tym nie mam pojęcia, czego może brakować. –

+0

Próbowałem też 4dp. Nie pomogło. – sr09

+0

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

Odpowiedz

9

Należy użyć android:shape="rectangle" zamiast android:shape="line" aby pracować na każdej wersji Androida ... (również zmienić stroke do solid)

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

zabawy!

5

Updated odpowiedź

Po dalszych badań wydaje się, że dzielniki pokaże tylko wtedy, gdy wysokość dzielnika jest ściśle mniej niż zestawu dividerHeight dla ListView. Na przykład:

custom_divider.xml (Zauważ, że wysokość jest określona przez dzielnik android:width)

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

Układ 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"/> 

... zadziała. Ale to nie będzie:

custom_divider.xml (Zauważ, że wysokość jest określona przez dzielnik android:width)

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

Układ 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"/> 

Domyślam się, że Google pomieszało z optymalizacją rysowania dzielników Listview i po prostu ich nie narysuje jeśli nie ma wystarczająco dużo miejsca.

Original post

Wygląda jak trzeba ustawić dividerHeight zarówno na ListView i udar width z rozciągliwej dzielnika aby to działało na Androidzie 5.

Przykład:

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> 

Układ 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

Dzięki za rozwiązanie !! –

7

Czy Twój element listy jest wyłączony przez przesłonięcie funkcji isEnabled() w celu zwrócenia wartości false? W systemie Android L występuje zmiana (błąd?), Który powoduje ukrywanie elementów podziału na liście, jeśli element jest wyłączony. Wpadłem na ten sam problem, moje dzielniki list działające we wszystkim poza L, a to okazało się być przyczyną.

Oto kilka stanowisk, gdzie zostało to omówione, jak również kwestia otwarta z Google:

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

Jeśli jest to W przypadku, wygląda na to, że konieczne może być ręczne narysowanie dzielnika z niestandardowym widokiem i ustawienie dzielnika na wartość null na liście. Będę próbował tego samego.

+0

Tak, to błąd, który jest również widoczny w Lollipop –

1

Atrybut wysokości nie jest właściwością w tagu gradientu. Użyj wielkości attr jak poniżej.

<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> 
Powiązane problemy