在 GridView 或 ListView 中增加额外的底部空间

6

是否可以在 GridView 底部添加额外的空间(有点像空行)?

我希望在滚动到 GridView 底部时,会多出 50dp 的空白。我尝试将 paddingBottom 设置为 50dp,但似乎没有改变任何东西。


请提供您的XML文件或屏幕截图。 - Harshid
5个回答

14

如果我理解得正确,它应该看起来像这样:

为此,Maciej在此提供了一个简单的解决方案:如何在GridView底部添加额外空间

您只需要在GridView布局中添加以下内容:

<GridView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="50dp"
android:clipToPadding="false"/>

最重要的部分是clipToPadding属性,必须将其设置为false。

您还可以查看来自Google的相应博客文章,在其中提到了这个解决方案:https://plus.google.com/+AndroidDevelopers/posts/LpAA7q4jw9M


请注意,重复的答案并不理想。相反,您应该发布一个单一的答案,并在需要引用时给出链接。 - Paresh Mayani
我没有从原始答案中复制答案本身。我进行了调整,给了所有者信用,并在这里展示了这个答案,因为它比其他答案更合适。 - Elementary
我的意思是你在Stackoverflow上发布了相同内容的相同答案! - Paresh Mayani
1
我理解你的意思,但如果有类似的问题,而Maciej给出了最好的解决方案,那么我应该怎么做呢?仅仅发布链接只会导致评论,而不是答案。在我看来,最好还是直接发布答案,并注明出处,这样用户就可以更容易地找到最适合自己的答案,而不必在不同的页面之间跳转。 - Elementary
根据SO规则和最佳实践,最好的解决方案是发布一个单一的答案,并在特定线程的评论中给出该答案的链接! - Paresh Mayani
感谢您提供的精彩答案!与动画相比,链接中的图像更好地展示了目标...无论SO Karen说什么,感谢您发布这篇文章。 - eric

1
你可以实现自己的GridViewAdapter扩展ArrayAdapter,并且:
@Override
public int getCount() {
    return gridArray.size();
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    //...
    if (getCount()-1 == position) {
        convertView.setPadding(0, 0, 0, 50);
    } else {
        convertView.setPadding(0, 0, 0, 0);;
    }
    return convertView;
}

其中50是以像素为单位的底部填充请查看View.setPadding(int, int, int, int)

并且您的GridItemView布局必须为android:layout_height="wrap_content"


0

可以尝试这样做:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:ads="http://schemas.android.com/apk/lib/com.google.ads"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:gravity="center"
    android:orientation="vertical" >

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="0dip"
        android:layout_weight="1"
        android:orientation="vertical" >

        <GridView
            android:id="@+id/gridUsers"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:clipChildren="true"
            android:columnWidth="100dp"
            android:fastScrollEnabled="true"
            android:gravity="center"
            android:numColumns="auto_fit"
            android:scrollbars="none"
            android:stretchMode="columnWidth" >
        </GridView>

        <TextView
            android:id="@android:id/empty"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:gravity="center"
            android:padding="10dp"
            android:textColor="#f1f1f1"
            android:textSize="15sp"
            android:textStyle="bold"
            android:visibility="gone" >
        </TextView>
    </LinearLayout>

    <LinearLayout
        android:id="@+id/linlaProgressBar"
        android:layout_width="fill_parent"
        android:layout_height="50dp"
        android:gravity="center"
        android:orientation="horizontal" >
    </LinearLayout>

</LinearLayout>

我在一个应用程序中使用这个,其中id为linlaProgressBarLinearLayout作为加载更多数据时ProgressBar的容器。

这个例子展示了一个GridView,但是将其替换为ListView将会达到相同的结果。


0

尝试将paddingBottom添加到其内部的容器中。在listview上使用PaddingBottom不起作用,因为listview会在其最后一个元素之后添加它,而该元素不会显示在屏幕上。它有点像假装自己具有无限高度。

另一种解决方案是使用RelativeLayout,并将一个具有固定高度但没有图形元素的视图推入底部和GridView之间,将GridView设置为在该视图之上布局。


0
使用ListView,您可以添加页脚,但是GridView不支持此功能。我建议添加一个高度为所需的空行是最干净的解决方案。

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