Luke Allison
Luke Allison

Reputation: 3218

Adding a divider between rows of GridView

I've made a data table using a GridView and would like to apply a horizontal divider below each row as shown in the Google material design guidelines. However, I cannot find any information on its implementation. Any ideas?

enter image description here

Upvotes: 0

Views: 1325

Answers (3)

Mohamed Atef
Mohamed Atef

Reputation: 167

Just Create Custom gridview like this

package net.nightwhistler.pageturner.view;

import net.nightwhistler.pageturner.R;
import net.nightwhistler.pageturner.library.LibraryBook;
import net.nightwhistler.pageturner.library.QueryResult;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Rect;
import android.util.AttributeSet;
import android.view.KeyEvent;
import android.widget.GridView;

public class BookCaseView extends GridView {

private Bitmap background;

private int mShelfWidth;
private int mShelfHeight;   

private QueryResult<LibraryBook> result;    

private LibraryBook selectedBook;   

public BookCaseView(Context context, AttributeSet attributes) {
    super(context, attributes);

    this.setFocusableInTouchMode(true);
    this.setClickable(false);

    final Bitmap shelfBackground = BitmapFactory.decodeResource(context.getResources(),
            R.drawable.shelf_single);
    setBackground(shelfBackground);
    this.setFocusable(true);
}

public void setBackground(Bitmap background) {
    this.background = background;

    mShelfWidth = background.getWidth();
    mShelfHeight = background.getHeight();
}   

protected void onClick( int bookIndex ) {
    LibraryBook book = this.result.getItemAt(bookIndex);

    this.selectedBook = book;
    invalidate();
}

@Override
protected void dispatchDraw(Canvas canvas) {
    final int count = getChildCount();
    final int top = count > 0 ? getChildAt(0).getTop() : 0;
    final int shelfWidth = mShelfWidth;
    final int shelfHeight = mShelfHeight;
    final int width = getWidth();
    final int height = getHeight();
    final Bitmap background = this.background;

    for (int x = 0; x < width; x += shelfWidth) {
        for (int y = top; y < height; y += shelfHeight) {
            canvas.drawBitmap(background, x, y, null);
        }

        //This draws the top pixels of the shelf above the current one

        Rect source = new Rect(0, mShelfHeight - top, mShelfWidth, mShelfHeight);
        Rect dest = new Rect(x, 0, x + mShelfWidth, top );              

        canvas.drawBitmap(background, source, dest, null);            
    }        


    super.dispatchDraw(canvas);
}

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if ( keyCode == KeyEvent.KEYCODE_BACK && this.selectedBook != null ) {
        this.selectedBook = null;
        invalidate();
        return true;
    }

    return false;
}   

}

I got his answer from her background scrolling with item in gridview

Upvotes: 1

earthw0rmjim
earthw0rmjim

Reputation: 19427

Use the GridView's android:horizontalSpacing attribute.

Upvotes: 1

Bhoomit_BB
Bhoomit_BB

Reputation: 36

Try to give background color to GridView like this

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

Give horizontalSpacing and verticalSpacing's size in dp and give background color which you want as a divider like Grey

Upvotes: 1

Related Questions