389 Stimmen

Wie man den Abstand zwischen listView-Elementen in Android einstellt

Ich habe versucht, marginBottom auf der listView verwenden, um Platz zwischen listView Element zu machen, aber immer noch die Elemente sind zusammen angehängt.

Ist das überhaupt möglich? Wenn ja, gibt es einen bestimmten Weg, dies zu tun?

Mein Code lautet wie folgt

<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 benutzerdefinierter Listeneintrag:

<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 Abstände zwischen den Listenelementen schaffen?

864voto

Nik Reiman Punkte 37385

@Asahi hat den Nagel so ziemlich auf den Kopf getroffen, aber ich wollte nur noch ein bisschen XML für alle hinzufügen, die vielleicht später über Google hier reinkommen:

<ListView android:id="@+id/MyListView"
  android:layout_height="match_parent"
  android:layout_width="match_parent"
  android:divider="@android:color/transparent"
  android:dividerHeight="10.0sp"/>

Aus irgendeinem Grund werden Werte wie "10", "10.0" und "10sp" alle von Android für die dividerHeight Wert. Er benötigt eine Fließkommazahl und eine Einheit, z. B. "10.0sp". Wie @Goofyahead anmerkt, können Sie für diesen Wert auch anzeigeunabhängige Pixel verwenden (z. B. "10dp").

25 Stimmen

Dies ist nicht hilfreich, wenn Sie auch eine Trennwand anzeigen möchten, ohne sie zu dehnen.

5 Stimmen

FYI - kann durch Code getan werden - getListView().setDividerHeight(10)

2 Stimmen

Oder Android:divider="@null"

63voto

Asahi Punkte 13158

Vielleicht divider o dividerHeight Eigenschaft der ListView kann Ihr Problem lösen.

45voto

idunnololz Punkte 7638

Obwohl die Lösung von Nik Reiman funktioniert, fand ich sie nicht optimal für das, was ich tun wollte. Die Verwendung der Trennlinie zum Festlegen der Ränder hat das Problem, dass die Trennlinie nicht mehr sichtbar ist, so dass Sie sie nicht verwenden können, um eine klare Grenze zwischen Ihren Elementen zu zeigen. Wenn Sie also Ihre Artikel anklickbar machen wollen und Ihre Artikel dünn sind, wird es sehr schwer sein, auf einen Artikel zu klicken, da die durch die Trennlinie hinzugefügte Höhe nicht Teil eines Artikels ist.

Glücklicherweise habe ich eine bessere Lösung gefunden, die es Ihnen ermöglicht, sowohl Trennlinien anzuzeigen als auch die Höhe der einzelnen Elemente nicht mit Hilfe von Rändern, sondern mit Hilfe von Auffüllungen anzupassen. Hier ist ein Beispiel:

ListView

<ListView
android:id="@+id/listView"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
/>

ListItem

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="10dp"
    android:paddingTop="10dp" >

    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:text="Item"
        android:textAppearance="?android:attr/textAppearanceSmall" />

</RelativeLayout>

0 Stimmen

In der Tat eine bessere Lösung. Danke!

16voto

Vasu Punkte 4832

Sie sollten Ihr Gepäck einpacken ListView Artikel (z.B. your_listview_item ) in einem anderen Layout, z. B. LinearLayout und fügen Sie Rand hinzu zu your_listview_item :

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <your_listview_item
        android:id="@+id/list_item"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_marginTop="5dp"
        android:layout_marginBottom="5dp"
        android:layout_marginLeft="5dp"
        android:layout_marginRight="5dp"
    ...
    ...
    />
</LinearLayout>

Auf diese Weise können Sie bei Bedarf auch rechts und links des Bildschirms Platz schaffen. ListView Artikel.

3 Stimmen

Ich wollte linken/rechten Rand, so dass Ihre Antwort war hilfreich für mich, aber ich mag nicht die Idee, nur ein anderes Layout nur für Rand Zweck wickeln

0 Stimmen

Es gibt einige Möglichkeiten und das ist die schlechteste in Bezug auf die Layout-Leistung versuchen Sie, an Listen mit Dutzenden (oder Hunderten) von Elementen zu denken :)

0 Stimmen

@andrea.spot würde es bei Listen mit zehn oder hundert Einträgen keine Rolle spielen, es sei denn, es wären so viele Einträge auf einmal auf dem Bildschirm sichtbar. ListView verwendet View-Recycling (wenn Sie Ihren Adapter richtig implementiert haben).

12voto

kamelnyc Punkte 181

Meine Lösung, um mehr Platz zu schaffen, aber die horizontale Linie beizubehalten, bestand darin, Folgendes hinzuzufügen divider.xml en el res/drawable und definieren Sie darin eine Linienform:

divider.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="line" >

    <stroke
        android:width="1px"
        android:color="@color/nice_blue" />

</shape>

dann verweise ich in meiner Liste wie folgt auf meinen Teiler:

<ListView
    android:id="@+id/listViewScheduledReminders"
    android:layout_width="match_parent"
    android:layout_height="0dip"
    android:layout_marginBottom="@dimen/mediumMargin"
    android:layout_weight="1"
    android:divider="@drawable/divider"
    android:dividerHeight="16.0dp"
    android:padding="@dimen/smallMargin" >

</ListView>

Beachten Sie die android:dividerHeight="16.0dp" Durch Vergrößern und Verkleinern dieser Höhe füge ich im Grunde mehr Polsterung oben und unten an der Trennlinie hinzu.

Ich habe diese Seite als Referenz verwendet: http://developer.Android.com/guide/topics/resources/drawable-resource.html#stroke-element

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X