2012-04-12 6 views
34

Ho creato un'applicazione Android con ListView. Ho aggiunto sia un'intestazione che un piè di pagina all'elenco. Ma quando si aggiunge un divisore/separatore crea anche uno spazio vuoto tra l'intestazione e il primo oggetto ListView. Fa lo stesso per l'ultimo oggetto ListView e per il piè di pagina.Spazio vuoto tra l'intestazione listview e il primo elemento

Lo spazio vuoto è equivalente alla dimensione del divisore tra tutti gli elementi ListView, con la differenza che non trae il divisore e lascia solo spazio vuoto. Ho pensato di aver trovato la soluzione con gli attributi xml 'Footer divisers enabled' e 'Header divisers enabled'. Ma quando li imposta su false, non cambia nulla. Ho anche provato a impostarli a livello di programmazione con

list.setFooterDividerEnabled(false); 
list.setHeaderDividerEnabled(false); 

Ma semplicemente non funziona. Qualche modo per risolvere questo problema? Semplicemente non voglio che lo spazio vuoto sia lì, voglio che il primo elemento si adatti esattamente all'intestazione (lo stesso per il piè di pagina).

+0

Puoi pubblicare un po 'di XML o codice di layout? –

+0

Hai qualche soluzione? –

+1

Il seguente aiuto potrebbe aiutarti? http://stackoverflow.com/questions/4961999/remove-bottom-divider-of-a-android-listview – Xebozone

risposta

-3

Basta fare

list.setDividerHeight(0)

Questo dovrebbe prendersi cura di esso.

+0

Questa non è la risposta. Fare ciò significherebbe che tutti i divisori sono spariti, che non è quello che voglio. – Niles11

1

ho provato solution e funziona (il codice è basato su pulltorefresh) di questo ragazzo:

il layout xml (header.xml):

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" > 

    <RelativeLayout 
     android:id="@+id/content" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" > 

     <ProgressBar 
      style="@android:style/Widget.ProgressBar.Small.Inverse" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_centerInParent="true" 
      android:layout_margin="16dp" 
      android:layout_marginTop="2dp" /> 
    </RelativeLayout> 
</LinearLayout> 

quando creare viste:

m_headerView = inflater.inflate(R.layout.header, this, false); 

se si desidera mostrare, fare questo:

m_headerView.setPadding(0, 0, 0, 0); 
m_headerView.setVisibility(View.VISIBLE); 

se si vuole nasconderlo, fare questo:

m_headerView.setPadding(0, -1000, 0, 0); 
m_headerView.setVisibility(View.GONE); 

funziona perfettamente nella nostra project.hope utile.

+0

La tua soluzione nasconde l'intera intestazione, ma questo non è ciò che l'OP chiedeva. –

+0

sì, davvero. Non ho capito la domanda molto chiaramente. quello che ho incontrato è che, anche nascondendo il visore (impostato come andato), il visore occupa ancora uno spazio vuoto, ho trovato una soluzione sul web. Forse non è all'altezza della domanda, ma penso che sia ancora utile per alcuni altri ragazzi :) – lucian

5

mi sono imbattuto lo stesso problema, ma in una situazione un po 'diversa dalla vostra. Il mio ListView ha un'intestazione (una casella di ricerca), ma il primo elemento sotto di esso contiene un'intestazione di sezione (una data o una lettera) piuttosto che una normale voce di elenco (con il contenuto effettivo in forma di un'immagine, del testo, e così via). Come tale, voglio che non sia selezionabile, quindi nel mio adattatore personalizzato ho sostituito areAllItemsEnabled per restituire false.

Grande errore, perché questo è esattamente il colpevole. Vedi, sembra che, in base alla progettazione, l'implementazione , , ma ancora riserva spazio per i divisori tra un elemento abilitato e uno disattivato, anche se questi divisori non saranno disegnati. Il fatto che questa sia una decisione consapevole del design non significa che non sia stupido, ovviamente. Il più strano di tutti, questa politica di disegno dei divisori si basa solo sul valore restituito da areAllItemsEnabled invece dei valori restituiti dalle singole chiamate a isEnabled per gli articoli successivi.

Così, per lavorare intorno ad esso, ho dovuto tornare true da areAllItemsEnabled (ho mantenuto il metodo sovrascritto e aggiungere un commento su questo problema, altrimenti non sarei in grado di ricordare che un mese da oggi): lo e ecco, lo spazio bianco è scomparso, sostituito da un divisore.Ora, se voglio mostrare l'intestazione ListView e l'intestazione della prima sezione come esattamente adiacenti, devo solo scegliere un colore divisorio uguale al colore dell'intestazione di sezione.

Spero davvero che sia lo stesso caso del tuo o che la mia soluzione ti aiuti in qualche altro modo.

0

Nel metodo getview è possibile controllare se l'elemento è il primo o l'ultimo e impostare il divisore personalizzato che sarà di 0 altezza o altezza pixel singolo di colore trasparente.

0

goto le proprietà ListView nel layout di Android e cercare tag spaziatura ... un po 'come in Android, quando si creano nuovi layout, la creazione dei valori predefiniti è la spaziatura dell'intestazione e le proprietà del bordo. controllare, se è disponibile, quindi rimuoverlo

0

Non ho trovato una grande soluzione.

Impostare dividerHeight="0dp" e creare i miei divisori manualmente - direttamente nel formato XML o dinamicamente nell'adattatore se è necessario un controllo più preciso.