web-dev-qa-db-fra.com

android séparateurs / séparateurs de ligne gridview

Existe-t-il un moyen d'afficher des séparateurs (horizontaux) entre les lignes dans une vue en grille?

J'ai essayé de mettre une petite image de séparation sous chaque élément de la grille, mais ce n'est pas une solution, car elle ne s'étendra pas sur toute la ligne lorsqu'une ligne n'est pas complètement remplie d'éléments.

Existe-t-il un moyen d'ajouter simplement une image entre chaque ligne? Je ne peux trouver que des méthodes pour changer l'espace entre les lignes.

34
Frank

J'ai fini par créer une vue de grille personnalisée, quelque chose comme ceci:

https://stackoverflow.com/a/9757501/131034

en utilisant une image d'arrière-plan qui est exactement aussi haute qu'un élément dans ma vue de grille, et a un devider en bas.

Fonctionne comme un charme!

4
Frank

Si vous utilisez une disposition personnalisée pour les éléments de la grille. Le code ci-dessous fonctionnera.

Étape 1: donner une couleur d'arrière-plan à GridView

Cela va servir de diviseur.
Donnez horizontalSpacing et verticalSpacing comme 1dp
backgroundColor sera la couleur de votre séparateur.

<GridView
        Android:id="@+id/gridView1"
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content"
        Android:background="#e5e5e5"
        Android:horizontalSpacing="1dp"
        Android:numColumns="auto_fit"
        Android:stretchMode="columnWidth"
        Android:verticalSpacing="1dp" >

Étape 2: attribuer une couleur d'arrière-plan à la disposition d'élément de grille personnalisée

Cela va servir de couleur de premier plan pour GridItems.
Dans mon cas, je l'ai gardé blanc (#fff)

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    Android:orientation="vertical"
    Android:gravity="center"
    Android:background="#fff"
    Android:padding="15dp"
     >

    <ImageView
        Android:id="@+id/icon"
        Android:layout_width="50dp"
        Android:layout_height="50dp"
        Android:src="@drawable/ic_launcher_transparent" />

    <TextView
        Android:id="@+id/lable"
        Android:layout_marginTop="5dp"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:text="Medium Text"
        Android:textStyle="bold"
        Android:textColor="#D0583B"
        Android:textAppearance="?android:attr/textAppearanceSmall" />

</LinearLayout>

Résultat

enter image description here

Remarque:
Si vous ne voulez pas de séparateur vertical, conservez horizontalSpacing = 0dp
Si vous ne voulez pas de séparateur horizontal, gardez verticalSpacing = 0dp

81

Je voulais juste partager comment j'ai implémenté cela en utilisant le lien accepté par OP. Pour mon cas, j'avais également besoin de contrôler la longueur des séparateurs, donc je ne pouvais pas contourner le sous-classement GridView.

public class HorizontalSeparatorGridView extends GridView {

    // Additional methods 

    @Override
    protected void dispatchDraw(Canvas canvas) {

        final int count = getChildCount();
        for(int i = 0; i < count; i++) {
            View child = getChildAt(i);
            int bottom = child.getBottom();
            int left = child.getLeft();
            int right = child.getRight();

            Paint paint = new Paint();
            Paint.setColor(0xffececec);

            Paint.setStrokeWidth(Math.round(0.5 * density));

            int offset = // Some offset

            canvas.drawLine(left + offset, bottom, right - offset, bottom, Paint);
        }


        super.dispatchDraw(canvas);
    }

J'ai sous-classé dispatchDraw par opposition à onDraw juste pour être sûr, mais je ne pense pas que cela importerait dans ce cas.

3
jrhee17

Je suggère de faire ce qui suit:

"

    <TableRow
        Android:id="@+id/tableRow1"
        Android:layout_width="fill_parent"
        Android:layout_height="wrap_content"
        Android:layout_marginBottom="1sp"
        Android:layout_marginLeft="7sp"
        Android:layout_marginRight="7sp"
        Android:layout_marginTop="7sp"
        Android:background="@Android:color/transparent">

        <TextView
            Android:id="@+id/lblDeposit"
            Android:layout_width="60sp"
            Android:layout_height="40sp"
            Android:layout_gravity="center_vertical"
            Android:layout_marginLeft="0sp"
            Android:background="@drawable/rounded_top_left_rectangle"
            Android:gravity="center"
            Android:paddingLeft="5sp"
            Android:scaleType="fitXY"
            Android:text="Deposit"
            Android:textAppearance="?android:attr/textAppearanceMedium"
            Android:textColor="#000">
        </TextView>

        <TextView
            Android:id="@+id/lblDepositvalue"
            Android:layout_width="50sp"
            Android:layout_height="40sp"
            Android:layout_gravity="center_vertical"
            Android:layout_marginLeft="2sp"
            Android:layout_marginRight="13sp"
            Android:background="@drawable/rounded_top_right_rectangle"
            Android:gravity="center_vertical|center_horizontal"
            Android:scaleType="fitXY"
            Android:text="40000/-Rs"
            Android:textAppearance="?android:attr/textAppearanceMedium"
            Android:textColor="#000">
        </TextView>
    </TableRow>

    <TableRow
        Android:id="@+id/tableRow2"
        Android:layout_width="fill_parent"
        Android:layout_height="wrap_content"
        Android:layout_marginBottom="6sp"
        Android:layout_marginLeft="7sp"
        Android:layout_marginRight="7sp"
        Android:layout_marginTop="2sp"
        Android:background="@Android:color/transparent">

        <TextView
            Android:id="@+id/lblPoints"
            Android:layout_width="60sp"
            Android:layout_height="40sp"
            Android:layout_gravity="center_vertical"
            Android:layout_marginLeft="0sp"
            Android:background="@drawable/rounded_bottom_right_rectangle"
            Android:gravity="center"
            Android:paddingLeft="5sp"
            Android:scaleType="fitXY"
            Android:text="Points "
            Android:textAppearance="?android:attr/textAppearanceMedium"
            Android:textColor="#000">
        </TextView>

        <TextView
            Android:id="@+id/lblPointsValue"
            Android:layout_width="50sp"
            Android:layout_height="40sp"
            Android:layout_gravity="center_vertical"
            Android:layout_marginLeft="2sp"
            Android:layout_marginRight="13sp"
            Android:background="@drawable/rounded_bottom_left_rectangle"
            Android:gravity="center_vertical|center_horizontal"
            Android:scaleType="fitXY"
            Android:text="20"
            Android:textAppearance="?android:attr/textAppearanceMedium"
            Android:textColor="#000">
        </TextView>
    </TableRow>
</TableLayout>`  
0
Snehal Poyrekar