Próbowałem użyć marginBottom na listView, aby zrobić miejsce między listView Item, ale nadal elementy są połączone.
Czy to w ogóle możliwe? Jeśli tak, czy istnieje jakiś konkretny sposób?
Mój kod jest poniżej
<LinearLayout
android:id="@+id/alarm_occurences"
android:layout_width="fill_parent"
android:orientation="vertical"
android:layout_height="fill_parent"
android:background="#EEEEFF"
xmlns:android="http://schemas.android.com/apk/res/android">
<ListView
android:id="@+id/occurences"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
/>
</LinearLayout>
Mój niestandardowy element listy:
<com.android.alarm.listItems.AlarmListItem
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@drawable/alarm_item_background"
android:layout_marginBottom="10dp"
>
<CheckedTextView
android:id="@android:id/text1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:checkMark="?android:attr/listChoiceIndicatorMultiple"
android:textSize="20sp"
android:textStyle="bold"
android:typeface="serif"
android:padding="10dp"
/>
</com.android.alarm.listItems.AlarmListItem>
Jak w tym przypadku mogę wprowadzić odstępy między elementami listy?
Być może
divider
lubdividerHeight
własnośćListView
może rozwiązać problem.źródło
Chociaż rozwiązanie Nik Reimana DOES działa, uważam, że nie jest to optymalne rozwiązanie dla tego, co chciałem zrobić. Użycie dzielnika do ustawienia marginesów miało problem polegający na tym, że dzielnik nie będzie już widoczny, więc nie można użyć go do pokazania wyraźnej granicy między przedmiotami. Ponadto nie dodaje więcej „klikalnego obszaru” do każdego elementu, więc jeśli chcesz, aby Twoje elementy były klikalne, a Twoje przedmioty są cienkie, bardzo trudno będzie komukolwiek kliknąć element, ponieważ wysokość dodana przez dzielnik nie jest część przedmiotu.
Na szczęście znalazłem lepsze rozwiązanie, które pozwala zarówno wyświetlać przekładki, jak i dopasowywać wysokość każdego elementu przy użyciu nie marginesów, ale wypełnienia. Oto przykład:
ListView
Element listy
źródło
Powinieneś owinąć swój
ListView
przedmiot (powiedzmyyour_listview_item
) w inny układ, np.LinearLayout
I dodać margines doyour_listview_item
:W ten sposób możesz również dodać miejsce, jeśli to konieczne, po prawej i lewej stronie
ListView
przedmiotu.źródło
Moim rozwiązaniem, aby dodać więcej miejsca, ale zachować poziomą linię, było dodanie
divider.xml
dores/drawable
folderu i zdefiniowanie kształtu linii w środku:divider.xml
następnie na mojej liście odnoszę się do mojego dzielnika w następujący sposób:
zwróć uwagę, że
android:dividerHeight="16.0dp"
zwiększając i zmniejszając tę wysokość, po prostu dodałem więcej wypełnienia na górze i na dole linii podziału.Użyłem tej strony w celach informacyjnych: http://developer.android.com/guide/topics/resources/drawable-resource.html#stroke-element
źródło
Jeśli chcesz pokazać dzielnik z marginesami i bez rozciągania go - użyj InsetDrawable (rozmiar musi być w formacie, o którym powiedział @Nik Reiman):
Widok listy:
@ drawable / separator_line:
źródło
Możesz użyć:
przykład:
źródło
W przypadku mojej aplikacji zrobiłem to w ten sposób
właśnie
set the divider to null
i zapewnienie wysokości dzielnika zrobiło dla mnie.Przykład:
lub
i to jest wynik
źródło
android:divider="@android:color/transparent"
.Zdaję sobie sprawę, że odpowiedź została już wybrana, ale chciałem tylko podzielić się tym, co skończyło się dla mnie, gdy natknąłem się na ten problem.
Miałem listView, w którym każda pozycja na listView była zdefiniowana przez własny układ, podobny do tego, co Sammy napisał w swoim pytaniu. Wypróbowałem sugerowane podejście polegające na zmianie wysokości rozdzielacza, ale nie wyglądało to zbyt ładnie, nawet z niewidzialną przekładką. Po kilku eksperymentach po prostu dodałem
android:paddingBottom="5dip"
do ostatniego elementu układu TextView w pliku XML, który definiuje poszczególne wpisy listView.To dało mi dokładnie to, co próbowałem osiągnąć za pomocą
android:layout_marginBottom
. Znalazłem to rozwiązanie, aby uzyskać bardziej przyjemny estetycznie wynik niż próba zwiększenia wysokości rozdzielacza.źródło
Zamiast dawać margines, powinieneś podać padding:
LUB
źródło
Najprostszym rozwiązaniem z istniejącym kodem OP (elementy listy mają już dopełnienie) jest dodanie następującego kodu:
Ta SO odpowiedź pomogła mi.
Uwaga: Na starszych platformach możesz napotkać błąd zbyt szybkiego recyklingu elementu listy, o co tutaj proszono .
źródło
i ustaw
paddingTop
,paddingBottom
idividerHeight
na tę samą wartość, aby uzyskać równe odstępy między wszystkimi elementami i przestrzeni na górze i na dole listy.Ustawić
clipToPadding
abyfalse
pozwolić widoki być sporządzone w tym wyściełanej powierzchni.Ustawić
divider
aby@null
usunąć linie między elementami listy.źródło
Kolejnym sposobem na zwiększenie odstępów między elementami listy jest dodanie pustego widoku do kodu adaptera poprzez podanie wymaganego odstępu atrybutu layout_height. Na przykład w celu zwiększenia odstępów między elementami listy dodaj ten widok fikcyjny (pusty widok) na końcu elementów listy.
Zapewni to odstęp 15 dna między elementami widoku listy. Możesz to bezpośrednio dodać, jeśli układ nadrzędny ma układ liniowy, a orientacja jest pionowa, lub wykonaj odpowiednie kroki dla innego układu. Mam nadzieję że to pomoże :-)
źródło
musisz tylko uczynić tło przezroczystym dla dzielnika listy i ustawić wysokość zgodnie z potrzebną przerwą.
źródło
Znalazłem niezbyt dobre rozwiązanie w przypadku, gdy używasz HorizontalListView, ponieważ dzielniki nie wydają się z nim współpracować, ale myślę, że zadziała w obu przypadkach dla bardziej powszechnego ListView.
Właśnie dodając:
w najniższym widoku układu, który nadmuchujesz w klasie adaptera, utworzysz odstępy między elementami
źródło
Aby zapewnić odstępy między widokami w widoku listy, użyj dopełnienia w widokach nadmuchiwanych.
Możesz używać
android:paddingBottom="(number)dp"
&&android:paddingTop="(number)dp"
na swoim widoku lub widokach, które zawyżasz w widoku listy.Rozwiązanie dzielnika jest tylko naprawą, ponieważ pewnego dnia, gdy będziesz chciał użyć koloru dzielnika (teraz jest przezroczysty), zobaczysz, że linia podziału została rozciągnięta.
źródło
Wiele z tych rozwiązań działa. Jeśli jednak wszystko, czego chcesz, to móc ustawić margines między elementami, najprostszą metodą, jaką wymyśliłem, jest zawinięcie elementu - w twoim przypadku CheckedTextView - w LinearLayout i umieszczenie w nim formatowania marginesu dla elementu, nie układ root. Pamiętaj, aby nadać układowi zawijania identyfikator i utworzyć go wraz z CheckedTextView w adapterze.
Otóż to. W efekcie tworzysz margines na poziomie elementu dla ListView. Ponieważ ListView nie wie o żadnym układzie elementów - tylko twój adapter. Zasadniczo to zawyża część układu przedmiotu, która była wcześniej ignorowana.
źródło
Pomoże to dodać wysokość dzielnika.
Jeśli chcesz dodać widok niestandardowy, możesz dodać mały widok do samego układu listy widoku.
źródło