如何在Android上设置GridView的边框

13
如何设置GridView的边框。 类似于ListView的Divider和DividerHeight。 或者如何显示边框。

分隔符不是ListView的边框...您想控制此图像中每个项目之间的灰色边框,还是只想要类似图片框架的外部边框? - Sam
4个回答

44

以下是在GridView中使用边框的一些示例。

GridView Borders

您可以看到我在XML中定义了红色和蓝色的边框。

这是我的main.xml布局:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/root"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/red" >

    <GridView
        android:id="@+id/gridview"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_margin="10dp"
        android:background="@color/blue"
        android:columnWidth="90dp"
        android:gravity="center"
        android:horizontalSpacing="10dp"
        android:numColumns="auto_fit"
        android:stretchMode="columnWidth"
        android:verticalSpacing="10dp"
         />

</RelativeLayout>

GridView中红色边框的厚度由layout_margin属性控制,而蓝色边框则由horizontalSpacingverticalSpacing控制。

为了制作黑色单元格背景,我使用了这个布局,并将其保存为list_item.xml:

<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@android:id/text1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@android:color/black"
    android:gravity="center_vertical"
    android:minHeight="?android:attr/listPreferredItemHeight"
    android:paddingLeft="6dip"
    android:textAppearance="?android:attr/textAppearanceLarge" />

我的活动:

public class Example extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        String[] array = new String[] {"one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten"};
        List<String> list = new ArrayList<String>(Arrays.asList(array));
        GridView grid = (GridView) findViewById(R.id.gridview);
        grid.setAdapter(new ArrayAdapter<String>(this, R.layout.list_item, list));
    }
}

这会在GridView周围留出一定的边距。有没有办法为GridView添加填充,以便滚动区域仍然填满整个屏幕,而不是在GridView周围留下10dp的边距? - mdupls
这对我听起来好像你不想要我的图片中的红色边距,而是想要现在红色边距处的蓝色内边距。只需在GridView中将layout_margin更改为layout_padding即可。 - Sam
1
使用 android:padding 基本上可以得到与 android:layout_margin 相同的结果。 - mdupls
如果您在GridView上放置填充并将android:clipToPadding="false"添加到GridView中,它将在其周围添加填充,但当视图滚动时不会保留。 - Cameron Ketcham
我尝试了这个方法,它可以工作,但是当我尝试使用选择器来改变按下单元格的颜色时,它不起作用...难道唯一的解决方案是创建一个自定义适配器吗? - Bernardo
显示剩余4条评论

13

在网格项 XML 文件中使用以下 XML 文件作为背景。

<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <solid android:color="@android:color/transparent" />
    <corners
        android:bottomRightRadius="12dp"
        android:bottomLeftRadius="12dp"
        android:topLeftRadius="12dp"
        android:topRightRadius="12dp" />
    <stroke
        android:color="@android:color/white"
        android:width="1dp" />
</shape>

6
请在res/drawable文件夹中创建grid_row_border.xml。
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <solid android:color="@android:color/transparent" />
    <corners
        android:bottomRightRadius="5dp"
        android:bottomLeftRadius="5dp"
        android:topLeftRadius="5dp"
        android:topRightRadius="5dp" />
    <stroke
        android:color="@color/material_grey_600"
        android:width="1dp" />
</shape>

现在您可以将其用于网格布局XML中,如下所示:
android:background="@drawable/grid_row_border"

提供填充[android:padding="5dp"]和外边距[android:layout_margin="5dp"],以使界面更美观。


0

我在图片行的xml中添加了这些视图:

<View
    android:layout_width="@dimen/listGalleryItemWidthLarge"
    android:layout_height="2dip"
    android:layout_above="@+id/gallery_row_iv"
    android:layout_centerHorizontal="true"
    android:background="#FFFFFF" />

<View
    android:layout_width="@dimen/listGalleryItemWidthLarge"
    android:layout_height="2dip"
    android:layout_below="@+id/gallery_row_iv"
    android:layout_centerHorizontal="true"
    android:background="#FFFFFF" />

<View
    android:layout_width="2dip"
    android:layout_height="@dimen/listGalleryItemHeightLarge"
    android:layout_centerVertical="true"
    android:layout_toRightOf="@+id/gallery_row_iv"
    android:background="#FFFFFF" />

<View
    android:layout_width="2dip"
    android:layout_height="@dimen/listGalleryItemHeightLarge"
    android:layout_centerVertical="true"
    android:layout_toLeftOf="@+id/gallery_row_iv"
    android:background="#FFFFFF" />

请注意,我正在为我的GridView使用自定义布局和适配器。

1
样式是你的好朋友 :) - greg7gkb

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接