web-dev-qa-db-fra.com

Marge sur les éléments ListView dans android

J'essaie (en vain) d'ajouter des marges à mes éléments ListView. J'ai essayé d'ajouter des valeurs de marge à mon RelativeLayout ci-dessous, mais peu importe ce que je fais, tout ce que je semble obtenir est une ligne 1px entre chaque élément.

Ce que j'aimerais vraiment, c'est avoir des coins arrondis sur chaque élément, une bordure noire de 1px et une marge de 3-5px à gauche, en haut et à droite, mais pour l'instant je vais me contenter d'une marge autour de chaque élément :-)

Comment atteindre mes objectifs? Juste la marge pour l'instant ... ;-)

Voici ce que j'ai:

MISE À JOUR: J'ai mis à jour le xml ci-dessous en supprimant la disposition principale et la disposition des fragments. J'ai également mis à jour la disposition des éléments ListView à ce que j'ai maintenant, ce qui est plus proche de ce que je veux, mais toujours pas parfait. Capture d'écran également ajoutée

affichage de la liste

<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:paddingLeft="@dimen/matchMargin"
Android:paddingRight="@dimen/matchMargin"
Android:paddingTop="@dimen/matchMargin" >

<RelativeLayout
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:background="#cfcfcfcf" >

    <include
        Android:id="@+id/matchKampstart"
        layout="@layout/kampstart_layout" />

    <LinearLayout
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:layout_below="@id/matchKampstart"
        Android:layout_marginTop="@dimen/belowKampstartMargin" >

        <ImageView
            Android:id="@+id/tournamentImageView"
            Android:layout_width="wrap_content"
            Android:layout_height="wrap_content"
            Android:layout_gravity="center_vertical"
            Android:layout_marginRight="2dp"
            Android:adjustViewBounds="true"
            Android:contentDescription="@string/tournamentImageViewContentDescription"
            Android:gravity="left"
            Android:src="@drawable/sofabold_launcher" />

        <ImageView
            Android:id="@+id/homeTeamImageView"
            Android:layout_width="wrap_content"
            Android:layout_height="wrap_content"
            Android:layout_gravity="center_vertical"
            Android:layout_marginRight="2dp"
            Android:adjustViewBounds="true"
            Android:contentDescription="@string/homeTeamImageViewContentDescription"
            Android:src="@drawable/sofabold_launcher" />

        <TextView
            Android:id="@+id/homeTeam"
            Android:layout_width="wrap_content"
            Android:layout_height="wrap_content"
            Android:layout_gravity="center_vertical"
            Android:layout_marginRight="2dp"
            Android:text="@string/home"
            Android:textSize="14sp"
            Android:textStyle="bold" />

        <TextView
            Android:id="@+id/dash"
            Android:layout_width="wrap_content"
            Android:layout_height="wrap_content"
            Android:layout_gravity="center_vertical"
            Android:layout_marginRight="2dp"
            Android:gravity="center"
            Android:text="@string/dash"
            Android:textSize="12sp"
            Android:textStyle="bold" />

        <ImageView
            Android:id="@+id/awayTeamImageView"
            Android:layout_width="wrap_content"
            Android:layout_height="wrap_content"
            Android:layout_gravity="center_vertical"
            Android:layout_marginRight="2dp"
            Android:adjustViewBounds="true"
            Android:contentDescription="@string/awayTeamImageViewContentDescription"
            Android:src="@drawable/sofabold_launcher" />

        <TextView
            Android:id="@+id/awayTeam"
            Android:layout_width="wrap_content"
            Android:layout_height="wrap_content"
            Android:layout_gravity="center_vertical"
            Android:gravity="center"
            Android:text="@string/away"
            Android:textSize="14sp"
            Android:textStyle="bold" />
    </LinearLayout>

    <LinearLayout
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:layout_alignParentRight="true"
        Android:layout_below="@id/matchKampstart"
        Android:layout_marginTop="@dimen/belowKampstartMargin" >

        <ImageView
            Android:id="@+id/tvChannelImageView"
            Android:layout_width="wrap_content"
            Android:layout_height="wrap_content"
            Android:adjustViewBounds="false"
            Android:contentDescription="@string/tvChannelImageViewContentDescription"
            Android:gravity="right"
            Android:src="@drawable/sofabold_launcher" />
    </LinearLayout>

</RelativeLayout>

</RelativeLayout>

Cela me donne ce qui suit où vous remarquerez une très petite ligne à droite et à gauche pour chaque élément. Je voudrais aussi m'en débarrasser.

enter image description here

29
CJe

Je ne suis pas génial avec les mises en page, mais j'ai remarqué dans le passé que les lignes ListView ignorent souvent LayoutParams. Je ne sais pas où cela se produit ou s'il est possible de remplacer, je sais que vous pouvez facilement le contourner en ajoutant une autre disposition:

<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:layout_width="match_parent"
    Android:layout_height="?android:attr/listPreferredItemHeight"
    Android:background="#990000ff" >

    <LinearLayout
        Android:layout_width="match_parent"
        Android:layout_height="match_parent"
        Android:layout_marginRight="10dp"
        Android:layout_marginTop="10dp"
        Android:background="#9900ff00"
        Android:paddingLeft="10dp" >

        <TextView
            Android:id="@+id/text"
            Android:layout_width="match_parent"
            Android:layout_height="match_parent"
            Android:background="#99ff0000" />
    </LinearLayout>

</LinearLayout>

En règle générale, les dispositions qui n'ont qu'un seul enfant peuvent être supprimées, mais comme vous pouvez le voir, celle-ci sert un objectif:

Screen Shot

La disposition la plus extérieure est bleue, TextView est rouge et le vert est la disposition supplémentaire qui vous permet d'ajouter un espacement supplémentaire. Notez la différence entre le rembourrage (le vert à gauche) et la marge (pas de vert à droite). Vous avez clairement indiqué que vous souhaitez utiliser des marges (Android:layout_margin) mais votre code utilise clairement le remplissage (Android:padding) j'ai donc inclus les deux.

65
Sam

Un peu tard, mais ajoutez simplement les lignes suivantes à votre élément XML ListView

Android:divider="#00000000"
Android:dividerHeight="10dp"
17
Zac Sweers

Voir la réponse ici pour savoir pourquoi. En bref, l'enfant demande au parent et la ligne de vue de liste utilise AbsListView.LayoutParams, qui n'inclut pas les marges.

Pourquoi la marge de LinearLayout est ignorée si elle est utilisée comme vue de ligne ListView

12
user1978019

Dans votre adaptateur, récupérez votre disposition relative dans getView (), puis donnez les paramètres de disposition,

RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams)view.getLayoutParams();
params.setMargins(80, 0, 0, 0); //substitute parameters for left, top, right, bottom
YourRelativeLayoutInAdapter.setLayoutParams(params);
4
Talha

Je suppose que vous avez un ListView défini dans un fichier XML quelque part, si c'est le cas, vous pouvez y ajouter un peu de padding, afin qu'il y ait de l'espace entre le bord de l'écran et le ListView .

Exemple:

<ListView
    xmlns:Android="http://schemas.Android.com/apk/res/Android"
    xmlns:tools="http://schemas.Android.com/tools"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    Android:padding="15dp"/>
1
New2HTML