2010-10-27 1 views
35

J'ai un GridView dans mon application Android qui contient un certain nombre d'ImageViews. L'espace sur mon écran est limité et je veux que les images occupent autant d'espace que possible. Malheureusement, GridView laisse toujours 5 pixels d'espace vide autour du bord extérieur des images (l'espace entre ImageViews est défini avec un espacement horizontal/vertical et se comporte correctement). L'espace vide agit comme une marge autour des ImageViews, mais je ne peux pas m'en débarrasser. Est-ce que quelqu'un sait ce qui cause cette "frontière" et comment je peux m'en débarrasser (ou au moins la rendre plus petite)? Merci.Pourquoi y a-t-il des pixels supplémentaires autour de mon Android GridView?

Mise à jour: Je crée les images ImageViews en gonflant un fichier .xml dans la méthode getView() de ma classe Adapter. Voici le xml je gonfler:

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

Je définis le GridView dans ma mise en page fichier xml comme ceci:

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

Voici une capture d'écran du problème. La zone rouge dans mon GridView. Les zones violettes sont mes images. L'image affichée est un simple rectangle bleu avec un centre transparent. L'image est 45x45 pixels (mais seulement 30x30 pixels dans mon application - je m'en soucierai plus tard). La bordure rouge autour du violet est ce que j'essaie d'éliminer.

alt text

Répondre

67

Merci pour le conseil tout le monde, mais il s'avère que la réponse était quelque part que nous ne nous attendions pas. Les pixels supplémentaires ont été provoqués par le sélecteur affecté à ma GridView. Je suppose que le sélecteur par défaut est une image de 9 patchs avec une bordure de 5 pixels. Quand j'ai créé et assigné un patch de 9 qui avait des bordures plus petites (ou pas de bordures du tout - juste un fichier .png normal) l'espace supplémentaire dans mon GridView est parti.

+10

+1, vous m'avez sauvé au moins 4 heures d'essai et d'erreur. Il semble qu'une manière propre de spécifier "aucune image" dans cette situation est 'android: listSelector =" @ android: id/vide "' – mvds

+0

@mvds android: listSelector = "@ Android: id/vide" a provoqué une exception. Il semble que GridView ne peut pas gérer ce listSelector. Je place le sélecteur à une couleur transparente à la place. – Janusz

+30

@Janusz correct, sur certains appareils '@android: id/empty' conduit à un crash. '@android: color/transparent' semble être le bon choix. – mvds

0

Avez-vous essayez de régler le padding sur le ImageView et la horizontalSpacing et verticalSpacing sur le GridView à 0?

+0

Merci. J'ai essayé ça. Ça ne semble pas aider. J'ai mis à jour mon message original pour inclure le code pour mes vues GridView et ImageViews. –

+0

De quelle taille sont les images que vous mettez dans la grille? Sont-ils tous identiques? Vous devrez peut-être ajuster leur échelle pour occuper tout l'espace. http://developer.android.com/reference/android/widget/ImageView.ScaleType.html Regardez également votre mise en page dans la visionneuse hiérarchique pour voir à qui appartient cet espace. –

+0

J'ai réussi à définir la couleur de fond de mes contrôles, de sorte que je puisse voir à qui appartient l'espace de l'écran (voir ma question éditée). Le GridView est le propriétaire, mais le changement de remplissage ne réduit pas la zone possédée (bien qu'il puisse l'étendre). –

0

Essayez de définir layout_height et layout_width de l'affichage de l'image sur fill_parent.

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

le fera dynamiquement, je crois.

+0

Je dois le faire pour Android 2.1, MATCH_PARENT n'existait pas à l'époque . J'ai essayé FILL_PARENT et cela n'a toujours pas fonctionné. –

+0

MATCH_PARENT = FILL_PARENT, je ne sais pas pourquoi ils l'ont changé. –

+4

Nous l'avons modifié car 'FILL_PARENT' impliquait 'fill * leftover * space', ce qui dans la grande majorité des cas n'est pas le comportement réel.:) – adamp

0

Pour moi, rien aidé à l'exception de la mise en android:columnWidthattribut xml dans le (par exemple android:columnWidth="50dp")

Questions connexes