android gridview row dividers / separators

后端 未结 4 1649
臣服心动
臣服心动 2020-11-27 13:53

Is there a way to show (horizontal) dividers between rows in a gridview?

I tried putting a small divider-image below every grid item, but this is not a solution, bec

相关标签:
4条回答
  • 2020-11-27 14:28

    Just wanted to share how I implemented this using the link accepted by OP. For my case I also needed to control the length of the separators, so I couldn't get around subclassing 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);
        }
    

    I subclassed dispatchDraw as opposed to onDraw just to be safe but I don't think it would matter in this case.

    0 讨论(0)
  • 2020-11-27 14:35

    If you are using custom layout for grid items. Below code will work.

    Step 1: Give background color to GridView

    This is going to serve as a divider.
    Give horizontalSpacing and verticalSpacing as 1dp
    backgroundColor will be your divider color.

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

    Step 2: Give background color to Custom Grid Item Layout

    This is going to serve as a foreground color for GridItems.
    In my case I kept it white (#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>
    

    Result

    enter image description here

    Note:
    If you do not want vertical separator, keep horizontalSpacing = 0dp
    If you do not want horizontal separator, keep verticalSpacing = 0dp

    0 讨论(0)
  • 2020-11-27 14:37

    I suggest doing the following:

    `

        <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 讨论(0)
  • 2020-11-27 14:39

    I ended up creating a custom gridview, something like this:

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

    using a background image that is exactly as high as one item in my gridview, and has a devider at the bottom.

    Works like a charm!

    0 讨论(0)
提交回复
热议问题