Ich habe versucht, marginBottom in der listView zu verwenden, um Platz zwischen listView-Elementen zu schaffen, aber die Elemente sind immer noch miteinander verbunden.
Ist es überhaupt möglich? Wenn ja, gibt es einen bestimmten Weg, dies zu tun?
Mein Code ist unten
<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>
Mein benutzerdefiniertes Listenelement:
<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>
Wie kann ich in diesem Fall einen Abstand zwischen Listenelementen festlegen?
Vielleicht
divider
oderdividerHeight
Eigentum derListView
kann Ihr Problem lösen.quelle
Obwohl die Lösung von Nik Reiman funktioniert, fand ich, dass sie keine optimale Lösung für das ist, was ich tun wollte. Die Verwendung des Teilers zum Festlegen der Ränder hatte das Problem, dass der Teiler nicht mehr sichtbar ist, sodass Sie ihn nicht verwenden können, um eine klare Grenze zwischen Ihren Elementen anzuzeigen. Außerdem wird nicht mehr zu jedem Element ein "anklickbarer Bereich" hinzugefügt. Wenn Sie also Ihre Elemente anklickbar machen möchten und Ihre Elemente dünn sind, ist es für niemanden sehr schwierig, auf ein Element zu klicken, da die vom Teiler hinzugefügte Höhe dies nicht ist Teil eines Artikels.
Glücklicherweise habe ich eine bessere Lösung gefunden, mit der Sie sowohl Teiler anzeigen als auch die Höhe jedes Elements anpassen können, indem Sie keine Ränder, sondern Polster verwenden. Hier ist ein Beispiel:
Listenansicht
Listenpunkt
quelle
Sie sollten Ihren
ListView
Artikel (z. B.your_listview_item
) in ein anderes Layout einwickeln, z. B.LinearLayout
einen Rand hinzufügen zuyour_listview_item
:Auf diese Weise können Sie bei Bedarf auch rechts und links neben dem
ListView
Element Platz hinzufügen .quelle
Meine Lösung, um mehr Platz hinzuzufügen, aber die horizontale Linie beizubehalten, bestand darin,
divider.xml
denres/drawable
Ordner hinzuzufügen und die Linienform darin zu definieren:divider.xml
dann verweise ich in meiner Liste auf meinen Teiler wie folgt:
Beachten Sie, dass
android:dividerHeight="16.0dp"
ich durch Erhöhen und Verringern dieser Höhe im Grunde mehr Polsterung oben und unten an der Trennlinie hinzufüge.Ich habe diese Seite als Referenz verwendet: http://developer.android.com/guide/topics/resources/drawable-resource.html#stroke-element
quelle
Wenn Sie einen Teiler mit Rändern und ohne Dehnung anzeigen möchten, verwenden Sie InsetDrawable (Größe muss in einem Format vorliegen, über das @Nik Reiman gesprochen hat):
Listenansicht:
@ drawable / separator_line:
quelle
Sie können verwenden:
Beispiel:
quelle
Für meine Bewerbung habe ich so gemacht
Nur
set the divider to null
und dem Teiler Höhe zu geben, hat für mich getan.Beispiel:
oder
und das ist Ergebnis
quelle
android:divider="@android:color/transparent"
.Mir ist klar, dass bereits eine Antwort ausgewählt wurde, aber ich wollte nur mitteilen, was letztendlich für mich funktioniert hat, als ich auf dieses Problem gestoßen bin.
Ich hatte eine Listenansicht, in der jeder Eintrag in der Listenansicht durch ein eigenes Layout definiert wurde, ähnlich dem, was Sammy in seiner Frage gepostet hat. Ich habe versucht, die Höhe des Teilers zu ändern, aber das sah selbst mit einem unsichtbaren Teiler nicht allzu hübsch aus. Nach einigen Experimenten habe ich einfach ein
android:paddingBottom="5dip"
zum letzten TextView-Layoutelement in der XML-Datei hinzugefügt , das einzelne listView-Einträge definiert.Dies gab mir genau das, was ich mit dem Einsatz von erreichen wollte
android:layout_marginBottom
. Ich fand, dass diese Lösung ein ästhetisch ansprechenderes Ergebnis liefert als der Versuch, die Teilerhöhe zu erhöhen.quelle
Anstatt einen Rand anzugeben, sollten Sie eine Polsterung angeben:
ODER
quelle
Die einfachste Lösung mit dem vorhandenen Code von OP (Listenelemente sind bereits aufgefüllt) besteht darin, folgenden Code hinzuzufügen:
Diese SO-Antwort hat mir geholfen.
Hinweis: Auf älteren Plattformen tritt möglicherweise zu früh ein Fehler beim Recycling von Listenelementen auf, wie hier gefragt wurde .
quelle
und gesetzt
paddingTop
,paddingBottom
unddividerHeight
auf den gleichen Wert gleichen Abstand zwischen allen Elementen und Raum am oberen und unteren Ende der Liste zu erhalten.Ich habe festgelegt
clipToPadding
,false
dass die Ansichten in diesem gepolsterten Bereich gezeichnet werden sollen.Ich habe festgelegt
divider
,@null
um die Zeilen zwischen Listenelementen zu entfernen.quelle
Eine weitere Möglichkeit, den Abstand zwischen den Listenelementen zu vergrößern, besteht darin, dass Sie Ihrem Adaptercode eine leere Ansicht hinzufügen, indem Sie dem Attribut layout_height den gewünschten Abstand zuweisen. Zum Beispiel, um den unteren Abstand zwischen Ihren Listenelementen zu vergrößern, fügen Sie diese Dummy-Ansicht (leere Ansicht) am Ende Ihrer Listenelemente hinzu.
Dies ergibt also einen unteren Abstand von 15 dp zwischen Listenansichtselementen. Sie können dies direkt hinzufügen, wenn das übergeordnete Layout LinearLayout und die Ausrichtung vertikal ist, oder geeignete Schritte für ein anderes Layout ausführen. Hoffe das hilft :-)
quelle
Sie müssen nur den Hintergrund des Listenteilers transparent machen und die Höhe entsprechend Ihrer benötigten Lücke einstellen.
quelle
Ich habe eine nicht so gute Lösung für den Fall gefunden, dass Sie eine HorizontalListView verwenden, da Teiler nicht damit zu funktionieren scheinen, aber ich denke, dass dies für die häufigere ListView in beide Richtungen funktioniert.
Einfach hinzufügen:
In der untersten Ansicht des Layouts, das Sie in der Adapterklasse aufblasen, wird ein Abstand zwischen Elementen erstellt
quelle
Um den Abstand zwischen den Ansichten in einer Listenansicht zu bestimmen, verwenden Sie bitte das Auffüllen Ihrer aufgeblasenen Ansichten.
Sie können
android:paddingBottom="(number)dp"
&&android:paddingTop="(number)dp"
für Ihre Ansicht oder für Ansichten verwenden, die Sie in Ihrer Listenansicht aufblasen.Die Trennlösung ist nur eine Lösung, denn eines Tages, wenn Sie eine Trennfarbe verwenden möchten (im Moment ist sie transparent), werden Sie feststellen, dass die Trennlinie gestreckt wurde.
quelle
Viele dieser Lösungen funktionieren. Wenn Sie jedoch nur den Rand zwischen Elementen festlegen möchten, besteht die einfachste Methode, die ich mir ausgedacht habe, darin, Ihren Artikel - in Ihrem Fall die CheckedTextView - in ein LinearLayout zu verpacken und Ihre Randformatierung für den Artikel darin einzufügen. nicht das Root-Layout. Stellen Sie sicher, dass Sie diesem Wrapping-Layout eine ID geben und diese zusammen mit Ihrer CheckedTextView in Ihrem Adapter erstellen.
Das ist es. Tatsächlich instanziieren Sie den Rand auf Artikelebene für die ListView. Weil die ListView kein Elementlayout kennt - nur Ihr Adapter. Dadurch wird im Wesentlichen der Teil des Elementlayouts aufgeblasen, der zuvor ignoriert wurde.
quelle
Auf diese Weise können Sie die Teilerhöhe hinzufügen.
Wenn Sie eine benutzerdefinierte Ansicht hinzufügen möchten, können Sie eine kleine Ansicht im Listenlayout der listView-Elemente selbst hinzufügen.
quelle