So weisen Sie der Listview-Elementtrennlinie eine Auffüllung zu

75

Geben Sie hier die Bildbeschreibung ein

Wie kann ich dem Listenelement eine Auffüllung geben, wie ich es im Bild zeige? Ich möchte den Teiler im Layout wie im Bild gezeigt machen.

Das ist mein Listenfragmentcode

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" 
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_marginLeft="25dp"
android:layout_marginRight="25dp">

 <ListView 
    android:layout_height="wrap_content"
    android:layout_width="fill_parent"
     android:id="@+id/listV_main"
    android:layout_marginLeft="25dp"
android:layout_marginRight="25dp"/>

Dies ist mein Listenabschnittscode

<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:paddingLeft="10dp"
android:paddingTop="10dp"
android:paddingRight="10dp"
android:paddingBottom="10dp">
<include
    android:id="@+id/list_item_section_text"
    layout="@android:layout/preference_category"
     />

Dies ist mein Listenelementcode

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:minHeight="?android:attr/listPreferredItemHeight"
android:adjustViewBounds="true"
android:paddingRight="?android:attr/scrollbarSize"
   >
<ImageView
    android:id="@+id/showlist_item_entry_drawable"
    android:layout_width="82dp"
    android:adjustViewBounds="true"
    android:layout_height="68dp"
    android:scaleType="fitXY"
    android:paddingLeft="9dp"/> 
<RelativeLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginLeft="10dip"
    android:layout_marginRight="6dip"
    android:layout_marginTop="6dip"
    android:layout_marginBottom="6dip"
    android:layout_weight="1"
>
    <TextView android:id="@+id/list_item_entry_title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:singleLine="true"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:ellipsize="marquee"
        android:fadingEdge="horizontal" /> 
    <TextView android:id="@+id/list_item_entry_summary"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/list_item_entry_title"
        android:layout_alignLeft="@id/list_item_entry_title"
        android:textAppearance="?android:attr/textAppearanceSmall"
        android:singleLine="true"
        android:textColor="?android:attr/textColorSecondary" />
</RelativeLayout>

Swap-IOS-Android
quelle
3
Nur ein kurzer Kommentar zu Ihrer getView-Methode - Sie sollten die angegebene convertView verwenden und NICHT bei jeder Ausführung von getView inflate verwenden.
Zordid

Antworten:

215

Verwenden Sie 'Einschub' .....

(list_divider.xml)

<?xml version="1.0" encoding="UTF-8"?>
<inset xmlns:android="http://schemas.android.com/apk/res/android"
    android:insetLeft="50dp"
    android:insetRight="50dp" >

 <shape>
    <solid android:color="@color/orange" />
    <corners android:radius="2.0dip" />
</shape>

</inset>

und in Ihrer Listenansicht wie folgt hinzufügen ...

<ListView
    android:dividerHeight="2dp"
    android:divider="@drawable/list_divider"
    ...
/>

Sie können den Einschubwert wie gewünscht einstellen ...

AKTUALISIEREN

Wie von @Giulio Piancastelli hervorgehoben, können Sie, wenn sich der Hintergrund des Listencontainers vom Hintergrund des Listenelements unterscheidet, ' Ebenenliste ' verwenden ...

(list_divider.xml)

  <?xml version="1.0" encoding="utf-8"?>
  <layer-list xmlns:android="http://schemas.android.com/apk/res/android" >  
   <item>
        <shape android:shape="rectangle" >
            <solid android:color="@color/list_background" />
        </shape>
    </item>


    <item
        android:left="10dp"
        android:right="10dp">
        <shape android:shape="rectangle" >
            <solid android:color="@color/divider_color"/>
        </shape>
    </item>

        </layer-list>

und in Ihrer Listenansicht wie folgt hinzufügen ...

<ListView
    android:dividerHeight="2dp"
    android:divider="@drawable/list_divider"
    ...
/>
ASP
quelle
1
Android braucht wirklich insetEnd = "@ dimen / inset_end" Ohne insetStart und insetEnd wird dies kompliziert.
Eric Cochran
3
Dies funktioniert nicht, wenn sich der Hintergrund des Listencontainers vom Hintergrund der Listenelemente unterscheidet. Der vom Einschub verbleibende Platz ist transparent, wenn er als Listenteiler verwendet wird, sodass der Hintergrund des Listencontainers durch ihn sichtbar ist, anstatt nahtlos mit dem Hintergrund von Listenelementen zu verschmelzen. Im Gegensatz zu der auf einer layer-listanderen Seite auf dieser Seite vorgeschlagenen Lösung glaube ich, dass Ihre Lösung in einem solchen Fall niemals funktionieren könnte.
Giulio Piancastelli
18

Sie benötigen Polster für Trennwände? Erstellen Sie Ihre benutzerdefinierte Zeichenform wie folgt:

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

    <item
        android:left="10dp"
        android:right="10dp">
        <shape android:shape="rectangle" >
            <solid android:color="@android:color/black" />
        </shape>
    </item>

</layer-list>

Und als Teiler für Ihre ListView in XML festlegen:

<ListView
    android:dividerHeight="2dp"
    android:divider="@drawable/custom_divider"
    ...
/>

UPD

Ich habe nur ListViewin XML:

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

Teiler wie line.xmlin drawable:

<?xml version="1.0" encoding="utf-8"?>
    <layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
        <item
        android:left="10dp"
        android:right="10dp">
        <shape android:shape="rectangle" >
            <solid android:color="@android:color/black" />
        </shape>
    </item>
</layer-list>

Nehmen Sie keine Änderungen am ListViewIn-Code vor. Sie können versuchen, Clean zu verwenden, wenn die Ressourcen falsch erstellt wurden.

nfirex
quelle
Was ist Custom_Color? und ich muss XML in Drawable erstellen?
Swap-IOS-Android
Ich habe Ihre Lösung ausprobiert, aber sie zeigt immer noch die gleiche
Swap-IOS-Android
@ SwapAndroid Ich aktualisiere meine Antwort. Am besten verwenden Sie shape = "rechteck". custom_color - es ist die Farbe deines Teilers (ich ändere auf Standard Android Schwarz).
Nfirex
funktioniert bei mir nicht ... ich habe den Eintragsadaptercode bei der Hauptfrage hinzugefügt.
Swap-IOS-Android
Mit diesem XML-Code habe ich das Ergebnis: dl.dropbox.com/u/17900041/device-2012-12-27-164024.png Benötigen Sie so etwas oder nicht?
Nfirex
4

Wie @Giulio Piancastelli unter @ ASP-Antwort erwähnt hat, <inset>schlägt dies fehl, wenn die Hintergrundfarbe des Listencontainers nicht mit den Zeilen in der Liste übereinstimmt . Eine Lösung ist die Verwendung <layer-list>wie folgt :

//This item is to overlay the container colour with the row background colour
<item
    android:left="0dp"
    android:right="0dp">
    <shape android:shape="rectangle" >
        <solid android:color="@color/row_background" />
    </shape>
</item>

//This item is the divider, put it at bottom so it will overlay the background colour
<item
    android:left="92dp"
    android:right="0dp">
    <shape android:shape="rectangle" >
        <solid android:color="@color/divider
    </shape>
</item>

Dann können Sie es als Teiler festlegen, wie die meisten Antworten vermuten lassen:

<ListView
    android:dividerHeight="2dp"
    android:divider="@drawable/layer_list"
    ...
/>
GilbertLee
quelle
0

Geben Sie in Ihrer Liste das Paddingtop für das Hauptlayout als an

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
   android:padding="10dp"
   ....// Remaining fields
>
... //Remaining items
</LinearLayout>
Ram Kiran
quelle
es funktioniert nicht .. ich habe padding = "10" hinzugefügt, aber immer noch gleich .. keine padding links und rechts für Eintragselement
Swap-IOS-Android
@SwapAndroid, versuchen Sie diese ein
Ram kiran
0

Dies sollte eine alternative Lösung für diese Frage sein:

<View 
   android:layout_width="match_parent"
   android:layout_height="1dp"
   android:layout_alignParentBottom="true"
   android:background="color/secondary_text"
   android:layout_marginTop="16dp" />
Zafer Celaloglu
quelle
-4

Stellen Sie die Höhe und Farbe Ihres Listenelementteilers ein:

<ListView 
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:id="@+id/listV_main"
android:layout_marginLeft="25dp"
android:layout_marginRight="25dp"
android:divider="@android:color/darker_gray"
android:dividerHeight="1dp"/>
Kiryl Ivanou
quelle
Ich werde nur sagen, dass für <ListView> dies: android: divider = "@ android: color / darker_gray" android: dividerHeight = "1dp" funktioniert ok. Erstellen Sie eine neue ListView mit dem Layout android.R.layout.simple_item1 für ArrayAdapter, und Sie werden sehen, dass es funktioniert. So kann das Problem in Ihren benutzerdefinierten Artikeln sein
Kiryl Ivanou
Ich habe meinen Eintrag Adapter-Code hinzugefügt. Können Sie bitte eine Lösung vorschlagen
Swap-IOS-Android
Ich kann nur vorschlagen, eine einfache ListView zu erstellen mListView = (ListView) findViewById (R.id.listV_main); mListView.setAdapter (neuer ArrayAdapter (mContext, android.R.layout.simple_list_item_1, neuer String [] {"item1", "item2", "item3"})); Ich habe es für Ihre ListView überprüft;) funktioniert natürlich gut, zeigt Teiler) also suchen Sie einfach das Problem in Ihren erstellten Listenelementen. Wünschen Sie nur viel Glück!)
Kiryl Ivanou