2013-03-11 18 views
24

Sto provando (invano) ad aggiungere margini ai miei oggetti ListView. Ho provato ad aggiungere valori di margine al mio RelativeLayout di seguito, ma non importa quello che faccio tutto ciò che mi sembra di ottenere è una linea 1px tra ogni elemento.Margine su oggetti ListView in Android

Quello che mi piacerebbe davvero è avere gli angoli arrotondati su ogni elemento, un bordo nero 1px e un margine di 3-5px a sinistra, in alto ea destra ma in questo momento mi accontento di un margine intorno a ciascun articolo: -)

Come raggiungere i miei obiettivi? Proprio il margine per ora ... ;-)

Ecco quello che ho:

UPDATE: Ho aggiornato il codice XML di seguito rimuovendo il layout principale e il layout frammento. Ho anche aggiornato il layout delle voci di ListView con quello che ho ora, che è più vicino a quello che voglio ma non è ancora perfetto. Schermata aggiunto così

elemento ListView di layout xml

<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> 

Questo mi dà il seguente dove si noterà una piccola riga a destra e sinistra per ogni elemento. Di cui vorrei anche sbarazzarmi.

enter image description here

+0

Vuoi margine o padding? – Sam

+1

Creare angoli arrotondati e un bordo non è troppo difficile, questa [Guida per lo sviluppatore] (https://developer.android.com/guide/topics/resources/drawable-resource.html#Shape) spiega alcuni dettagli. – Sam

+0

Voglio margine. Voglio le mie voci di elenco separate. – CJe

risposta

59

Io non sono grande con i layout, ma ho notato in passato le righe di ListView spesso ignorano LayoutParams. Non ho idea di dove questo accade o se è possibile ignorare, so si può facilmente aggirare con l'aggiunta di un altro layout:

<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> 

layout genere che hanno un solo figlio può essere rimosso, ma come si può vedere questo serve a uno scopo:

Screen Shot

il più esterno layout è blu, il TextView è rosso, e il verde è il layout in più che permette di aggiungere un po 'di distanza in più. Notare la differenza tra il riempimento (il verde a sinistra) e il margine (nessun verde a destra). Hai chiaramente affermato che desideri utilizzare i margini (android:layout_margin) ma il tuo codice utilizza chiaramente il riempimento (android:padding), quindi ho incluso entrambi.

+0

Grazie Sam. Penso di aver fatto più o meno come descrivi (aggiungendo un layout in più). AFAICS hai lo stesso problema con le linee a destra (e probabilmente anche a sinistra). Qualche idea su come sbarazzarsi di quelli? – CJe

+2

Con "linea molto piccola" intendi [questi] (http://i.stack.imgur.com/KnXaV.png)? Questi sono i divisori che puoi rimuovere modificando 'android: divider' in un'immagine vuota o trasparente, o eventualmente impostando' android: dividerHeight = "0dp" '. – Sam

+0

La ragione per avere il padding sul RelativeLayout esterno equivale ad avere margine sul RelativeLayout interno ... non è vero? Proverò a capovolgerlo. – CJe

4

l'adattatore, prendere il layout relativo a GetView(), poi dare un layout params,

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

Grazie. Ci proveremo. Non c'è modo di farlo attraverso XML? E se è così, perché no? – CJe

+1

Non lo so esattamente ma quando ho provato prima usando xml. non ho lavorato anche per me Quindi ho risolto questo problema dando margine nell'adattatore. – Talha

+0

Impossibile farlo funzionare. Domanda aggiornata – CJe

15

Un po 'tardi visto questo, ma basta aggiungere le seguenti righe al tuo ListView elemento XML

android:divider="#00000000" 
android:dividerHeight="10dp" 
0

Aggiungi layout_width al ListView e metterlo al centro, o spostarlo da margin.

(forse da android:layout_centerHorizontal="true".)

ha funzionato eccellente per me.

0

Suppongo di avere un ListView definito in un file XML da qualche parte, in tal caso, è possibile aggiungere alcuni padding ad esso, in modo che ci sarà un po 'di spazio tra il bordo dello schermo e il ListView.

Esempio:

<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"/> 
Problemi correlati