Henrik
Henrik

Reputation: 133

Android GridView vertical borders

I'm trying to get borders between my fragments showing in a GridView. I setted the background color of the GridView to white and that of the fragments to black. Then I inserted those code lines:

int border = 2; // px
view.setColumnWidth((dm.widthPixels / 2)-(4*border));
view.setNumColumns(2);
view.setHorizontalSpacing(border);
view.setVerticalSpacing(border);

view is my GridView.

The result is nice borders at the left of the whole GridView and between the fragments on top and at the bottom. But between the both fragments on top there is no border.

Here is my declaration of the GridView:

<?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:id="@+id/overview"
    android:stretchMode="columnWidth"
    android:clipChildren="true" >

</GridView>

May be somebody can help.

Greets

Upvotes: 1

Views: 8043

Answers (1)

MH.
MH.

Reputation: 45503

Well, what I was trying to explain in my earlier comment: in stead of having the GridView regulate the spacing you want, why don't you try to make the grid items take care of that? One easy solution for this is by setting an appropriate drawable as background to the layout file you're using in/passing into the GridView's adapter - in other words: the layout you use for your grid items, which in your case will be the fragments you mentioned.

A quick example:

Take a GridView:

<GridView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/gridview"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="@android:color/white"
    android:numColumns="4" />

And an layout to be used for the item inside of it:

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@drawable/grid_background"
    android:gravity="center"
    android:text="Text"
    android:textColor="@android:color/white" />

And finally, the magic from a background drawable:

<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">    
    <stroke android:width="5dp" android:color="@android:color/white" />    
    <padding android:bottom="5dp" android:left="5dp" android:right="5dp"
        android:top="5dp" />    
    <solid android:color="@android:color/black" />    
</shape>

The result will then be:

gridview with 'borders'

I'm not sure why the horizontal and vertical spacing parameters don't work for you, by the way. When I use those, I'm able to get an effect pretty similar to that in the image above:

GridView:

<?xml version="1.0" encoding="utf-8"?>
<GridView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/gridview"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="@android:color/white"
    android:horizontalSpacing="10dp"
    android:numColumns="4"
    android:verticalSpacing="10dp" />

Item layout (simply swapped out the earlier background resource for a fixed colour):

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@android:color/black"
    android:gravity="center"
    android:text="Text"
    android:textColor="@android:color/white" />

Result:

another gridview with 'borders'

Hope this will help you on your way.

Upvotes: 6

Related Questions