【问题标题】:android gridview row dividers / separatorsandroid gridview 行分隔符/分隔符
【发布时间】:2012-08-20 00:02:30
【问题描述】:

有没有办法在 gridview 中的行之间显示(水平)分隔线?

我尝试在每个网格项目下方放置一个小的分隔图,但这不是解决方案,因为当一行没有完全填满项目时,它不会跨越整行。

有没有办法在每一行之间添加一张图片?我只能找到改变行间距的方法。

【问题讨论】:

标签: android gridview


【解决方案1】:

只是想分享我是如何使用 OP 接受的链接实现的。 对于我的情况,我还需要控制分隔符的长度,所以我无法绕过子类化 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);
    }

为了安全起见,我将 dispatchDraw 子类化为 onDraw 的子类,但我认为在这种情况下并不重要。

【讨论】:

  • 老兄,这是一个很好的解决方案!我正在寻找类似的东西(在图表上创建网格线),并且我更改了足够多的部分以完美地工作。感谢分享这个伟大的策略
【解决方案2】:

如果您对网格项目使用自定义布局。下面的代码将起作用。

第 1 步:为 GridView 赋予背景颜色

这将用作分隔线。
horizontalSpacingverticalSpacing 设为1dp
backgroundColor 将是您的分隔线颜色。

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

第 2 步:为自定义网格项布局赋予背景颜色

这将用作 GridItems 的前景色。
就我而言,我将其保持为白色(#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>

结果

注意:
如果您不想要垂直分隔符,请保留horizontalSpacing = 0dp
如果你不想要水平分隔符,请保留verticalSpacing = 0dp

【讨论】:

  • 让它变得简单的好主意
  • 有没有办法添加可绘制图像行水平分隔线?
  • 好吧,这里 gridView 的背景颜色作为分隔线,所以你可以添加一些重复的背景图像块,你可能会得到它作为分隔线。
  • 如果你有奇数个项目,那么最后一个项目用这个方法显示为灰色,虽然它很容易实现
  • 如果我们在 GridView 中有不规则数量的项目,此解决方案将无法正常工作,例如3 列 GridView 中的 7 个元素。
【解决方案3】:

我最终创建了一个自定义网格视图,如下所示:

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

使用与我的网格视图中的一个项目完全一样高的背景图像,并且在底部有一个分隔符。

像魅力一样工作!

【讨论】:

  • 嘿,这可以解释一下您是如何与上述链接集成的吗?或者如何将正常的 gridview 代码更改为您在答案中提到的自定义网格视图。我正在尝试类似的事情。我未能对书架代码进行逆向工程!
  • 我创建了一个扩展 Gridview 并覆盖 onDraw 的类,在其中调用 super.draw(canvas) 然后在画布上绘制货架。
  • @Frank 你能帮忙解决这个问题吗stackoverflow.com/questions/50131709/…
【解决方案4】:

我建议执行以下操作:

`

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

【讨论】:

  • 这是一个tablelayout,我用的是gridview。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多