web-dev-qa-db-fra.com

Android GridView draw diviseurs

J'aimerais connaître la manière la plus simple de tracer des séparateurs entre les éléments (actuellement des vues de texte) dans une GridView. La seule façon dont je peux penser est de tracer des bordures autour de ces vues de texte, ainsi, lorsqu'elles sont combinées, elles ressemblent à des séparateurs horizontaux et verticaux continus.

Il existe un setDivider () pour les vues de liste mais pas les vues de grille?

Merci.

24
Eric Chen

Malheureusement, après avoir regardé le code source, je ne voyais pas de moyen facile d'ajouter des bordures autre que d'adopter l'ajout de bordures à chaque cellule. Pour 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"
/>

Étant donné que toutes les lignes doublent de taille lorsqu'elles rejoignent leurs cellules voisines, j'ai fait la taille du diviseur 1px au lieu de 1dp afin qu'il n'apparaisse pas trop grand sur certains écrans. De plus, j'ai fait en sorte que la vue de la grille ait des marges négatives pour masquer les lignes de chaque côté. J'espère que ça aidera quelqu'un.

28
Chase

Dans le cas où vous souhaitez simplement des lignes simples comme bordures, il est beaucoup plus simple de définir une couleur d'arrière-plan pour un GridView et un remplissage et un espacement appropriés:

<GridView
    (...)
    Android:background="@color/LightGold"
    Android:listSelector="@Android:color/transparent"
    Android:horizontalSpacing="1dip"
    Android:verticalSpacing="1dip"
    Android:paddingLeft="1dip"
    Android:paddingTop="1dip" />
35
Fenix Voltres