2010-10-27 14 views
35

Ho un GridView nella mia applicazione Android che ha un numero di ImageViews in esso. Lo spazio sul mio schermo è limitato e voglio che le immagini occupino il maggior spazio possibile. Sfortunatamente, GridView lascia sempre 5 pixel di spazio sullo schermo vuoto attorno al bordo esterno di ImageViews (lo spazio tra ImageViews è impostato con spaziatura orizzontale/verticale e si comporta correttamente). Lo spazio vuoto si comporta come un margine attorno alle immagini, ma non riesco a liberarmene. Qualcuno sa che cosa sta causando questo "confine" e come posso liberarmene (o almeno renderlo più piccolo)? Grazie.Perché ci sono altri pixel attorno al mio GridView Android?

Aggiornamento: Sto creando ImageViews gonfiando un file .xml nel metodo getView() della mia classe Adapter. Ecco il xml sto gonfiaggio:

<ImageView 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:background="#FF00FF" /> 

ho definito il GridView nel mio file XML di layout come questo:

<GridView 
    android:id="@+id/mygrid" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:layout_above="@+id/abutton" 
    android:layout_marginBottom="8dp" 
    android:numColumns="5" android:background="#FF0000"/> 

Ecco uno screenshot del problema. L'area rossa nel mio GridView. Le aree viola sono le mie ImageViews. L'immagine visualizzata è un semplice rettangolo blu con un centro trasparente. L'immagine è di 45x45 pixel (ma nella mia app sono solo 30x30 pixel - mi preoccuperò più tardi). Il bordo rosso intorno al viola è quello che sto cercando di eliminare.

alt text

risposta

67

Grazie per il consiglio a tutti, ma si scopre che la risposta era da qualche parte che non ci aspettavamo. I pixel extra sono stati causati dal selettore che è stato assegnato al mio GridView. Immagino che il selettore predefinito sia un'immagine a 9 patch con un bordo di 5 pixel attorno. Quando ho creato e assegnato una 9-patch con bordi più piccoli (o senza bordi - solo un normale file .png) lo spazio extra nel mio GridView è andato via.

+10

+1, mi hai salvato almeno 4 ore di tentativi ed errori. Sembra che un modo pulito per specificare "nessuna immagine" in questa situazione sia 'android: listSelector =" @ android: id/vuoto "' – mvds

+0

@mvds android: listSelector = "@ android: id/empty" ha causato un'eccezione. Sembra che GridView non possa gestire questo listSelector. Ho invece impostato il selettore su un colore trasparente. – Janusz

+30

@Janusz corretto, su alcuni dispositivi '@android: id/empty' porta a un arresto anomalo. '@android: color/transparent' sembra essere la scelta giusta. – mvds

0

Hai provato impostando la padding sul ImageView e la horizontalSpacing e verticalSpacing sul GridView a 0?

+0

Grazie. Ci ho provato. Non sembra essere d'aiuto. Ho aggiornato il mio post originale per includere il codice per il mio GridView e ImageViews. –

+0

Di che dimensioni sono le immagini che si stanno inserendo nella vista a griglia? Sono tutti uguali? Potrebbe essere necessario regolare il modo in cui scala per occupare tutto lo spazio. http://developer.android.com/reference/android/widget/ImageView.ScaleType.html Inoltre, guarda il tuo layout in heirarchy viewer per vedere chi possiede quello spazio. –

+0

Sono riuscito a impostare il colore di sfondo dei miei controlli, in modo che possa vedere chi possiede lo spazio dello schermo (vedi la mia domanda modificata). GridView è il proprietario, ma la modifica del padding non riduce l'area di proprietà (sebbene possa espanderla). –

0

Provare a impostare layout_height e layout_width della vista immagine su fill_parent.

iv.setLayoutParams(ViewGroup.LayoutParams(ViewGroup.MATCH_PARENT, ViewGroup.MATCH_PARENT)); 

lo farò in modo dinamico, credo.

+0

Devo farlo per Android 2.1, MATCH_PARENT non esisteva allora . Ho provato FILL_PARENT e ancora non ha funzionato. –

+0

MATCH_PARENT = FILL_PARENT, non so perché l'hanno cambiato. –

+4

L'abbiamo modificato perché "FILL_PARENT" implicava "riempire * lo spazio rimanente *", che nella stragrande maggioranza dei casi non è il comportamento effettivo.:) – adamp

0

Per me non serviva a niente, tranne impostando l'attributo android:columnWidthnel xml (ad esempio android:columnWidth="50dp")

Problemi correlati