2011-08-20 5 views
24

Je voudrais connaître la façon la plus simple d'établir des séparateurs entre les éléments (textviews actuellement) dans un GridView. La seule façon dont je peux penser est de dessiner des bordures autour de ces textviews, donc quand ils sont combinés, ils ressemblent à des diviseurs horizontaux et verticaux continus.Android GridView dessiner diviseurs

Il y a un setDivider() pour listviews mais pas GridViews?

Merci.

+0

http://stackoverflow.com/a/12047760/ 375093 Cette réponse semble être plus facile et astucieuse que la réponse ci-dessous – Sundeep

+0

@Sundeep: Si vous définissez la couleur d'arrière-plan d'un élément GridView, la couleur de l'élément ne change pas lorsqu'il est mis au point. L'utilisateur sélectionné surmonte ce problème. –

+0

@Sundeep Il ralentira le processus de tirage. – twlkyao

Répondre

28

Malheureusement, après avoir regardé le code source, je ne vois pas moyen facile d'ajouter des bordures autres que de prendre l'approche d'ajouter des bordures à chaque cellule. À titre de référence, je posterai ma solution ici.

list_item.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="fill_parent" 
    android:orientation="horizontal" 
    android:background="@drawable/list_selector"> 

    <!-- Cell contents --> 

</LinearLayout> 

list_selector.xml

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item 
     android:state_selected="true" 
     android:drawable="@drawable/item_border_selected" 
    /> 
    <item 
     android:state_pressed="true" 
     android:drawable="@drawable/item_border_selected" 
    /> 
    <item 
     android:drawable="@drawable/item_border" 
    /> 
</selector> 

item_border.xml

<?xml version="1.0" encoding="UTF-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android"> 
    <solid 
     android:color="@android:color/transparent" 
    /> 
    <stroke 
     android:width="1px" 
     android:color="@color/list_divider" 
    /> 
</shape> 

item_border_selected.xml

<?xml version="1.0" encoding="UTF-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android"> 
    <solid 
     android:color="@color/list_select" 
    /> 
    <stroke 
     android:width="1px" 
     android:color="@color/list_divider" 
    /> 
</shape> 

items_view.xml

<?xml version="1.0" encoding="utf-8"?> 
<GridView 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:layout_marginLeft="-1px" 
    android:layout_marginRight="-1px" 
    android:listSelector="@android:color/transparent" 
/> 

Comme toutes les lignes doubles de taille qu'ils rejoignent leurs cellules voisines, je fait la taille du diviseur 1px au lieu de 1DP il n » t apparaissent trop grandes sur certains écrans. De plus, j'ai fait en sorte que la vue de la grille ait des marges négatives pour cacher les lignes de chaque côté. J'espère que ça aidera quelqu'un.

+0

Nice. Quels sont vos list_divider et list_select définis? – LuxuryMode

+0

Merci, en list_selector.xml j'ai utilisé « @ drawable/item_border » Il fonctionne très bien aussi divisée que la composante de l'élément, le problème est de savoir comment éviter l'auditeur onclick sur le diviseur sur l'interface utilisateur ?? Si vous cliquez sur l'élément de la frontière a également choisi :(!! toute solution pour que ?? –

35

Si vous voulez simplement des lignes simples comme les frontières, beaucoup, beaucoup plus simple réglage est une couleur d'arrière-plan pour un espacement de remplissage GridView et bon &:

<GridView 
    (...) 
    android:background="@color/LightGold" 
    android:listSelector="@android:color/transparent" 
    android:horizontalSpacing="1dip" 
    android:verticalSpacing="1dip" 
    android:paddingLeft="1dip" 
    android:paddingTop="1dip" /> 
+2

n'a pas fonctionné, je viens de recevoir une couleur unie et sans espace. – Noumenon

+0

Excellente idée, il vous donnera diviseur comme effet et vous pouvez augmenter diviseur en augmentant l'espacement horizontal et vertical. – Abdullah

+2

cela ne fonctionnera que si, comme un inconvénient, il provoque Overdraw. – Maragues