向ListView的最后一个元素添加下边距


82

我需要添加添加具有复杂项目背景的ListView:顶部和底部的偶数/奇数和圆角不同。看起来像这样:

ListView顶部

我已经通过级别列表实现了所有这些东西,但是我还想做一件事。现在,底部项目位于屏幕底部附近。最好增加一些空间。

ListView底部看起来不好

我不想在ListView中添加底边距,我只需要为最后一项添加边距。

我看到的方法是:

页脚

一种技巧–将带有空白TextView的页脚添加到ListView。但是页脚是非常不稳定的东西,它们通常在notifyDataSetChanged之后消失,并且没有办法将它们恢复

具有透明像素的图像

我要求设计师将透明像素添加到底部背景资源。不幸的是,在这种情况下,垂直居中被完全破坏了。例如,有9patch这样的:

9补丁

布局如下:

<?xml version="1.0" encoding="utf-8"?>

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
             android:layout_width="match_parent"
             android:layout_height="match_parent"
        >
    <!-- View with background with transparent pixels on bottom -->
    <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content"
                  android:id="@+id/item"
                  android:background="@drawable/some_bgr"
                  android:padding="10dp"
            >
        <TextView android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1"
                  android:text="Title"
                  android:layout_gravity="center"
                  android:textSize="18sp"
                />
        <TextView android:layout_width="wrap_content" android:layout_height="wrap_content"
                  android:text="Detail"
                  android:layout_gravity="center"
                  android:textSize="18sp"
                />
    </LinearLayout>

    <!-- Just for marking place took by view -->
    <FrameLayout android:layout_width="match_parent" android:layout_height="match_parent"
                 android:layout_below="@id/item"
                 android:background="#88ff55"
            />
</RelativeLayout>

结果:

结果

如您所见,居中不起作用。不幸。(顺便说一句,如果将此9patch指定为TextView的背景,则居中效果很好。如果您有任何文章对此进行了说明,请告诉我。)

将下边距添加到适配器实现中的最后一项

那应该起作用,但是由于未知的原因,我仍然无法使它起作用。我不喜欢这种方式,因为我不喜欢在代码中修改尺寸。

所以

已经有一种虚构的方法–用特定的位图和边距构造一些XML可绘制的图像。根据drawables概念,这应该是可能的,但是我找不到实现方法。可能有人知道吗?

还有其他想法吗?


您只想在最后一项之后添加边距?
高飞

是。问题听起来完全像这样
darja

请在下面查看我的答案
Goofy

我实际上会考虑使用页脚方法。我从未见过它们会自行消失,尤其是在致电之后notifyDataSetChanged()。如果发生这种情况,您可能正在做其他错误。页脚由管理,ListView与适配器的实际数据集无关。
MH。

Answers:


280

在您的中ListView,设置paddingBottomclipToPadding="false"

  <ListView
      android:layout_width="match_parent"
      android:layout_height="match_parent"
      android:paddingBottom="8dp"
      android:clipToPadding="false"
      android:scrollbarStyle="outsideOverlay"/>
  • 这也适用于RecyclerView

  • android:scrollbarStyle="outsideOverlay"当您希望滚动条不溢出到填充区域时使用。


我的8dp底部被剪掉了...实际上我只希望最后一个项目的8dp底部..那该​​怎么办?
伊丽莎白

2
@AndroidBeginner我不明白你想要什么。这正是这样做的。
clocksmith'2

12
不要忘记添加,android:scrollbarStyle="outsideOverlay"以使滚动条不会停留在填充内
gfpacheco 2015年

1
颜色可能会有些问题。底部填充具有listview的背景颜色,而不是最后一项的背景颜色
grine4ka

我们可以使用它管理SwipeRefreshLayout刷新指示器吗?
赫曼特·考希克

8

在列表中添加一个空白页脚,如下所示:

TextView empty = new TextView(this);
empty.setHeight(150);
listview.addFooterView(empty);

为此,我建议:listview.addFooterView(empty,data:null,isSelectable:false);
西蒙

4

您也可以根据需要通过代码来完成此操作,例如,在这里我对EditText的不同情况做出反应:

   if(s.toString().length()>0)
   {
      contacts_lv.setClipToPadding(false);
      contacts_lv.setPadding(0,0,0,270*screenDensity);
   }
   else
   {
      contacts_lv.setClipToPadding(true);
      contacts_lv.setPadding(0,0,0,0);
   }

2

Clocksmith的答案是最好的,也很聪明。您也可以创建一个空的页脚视图。


1
第一个解决方案不起作用,但是您的建议确实起作用,确实是个好主意,谢谢您
Badr 2015年


0

另一个解决方案可能是您制作具有特定高度的模拟视图。

在适配器的getViewCount中返回2。

在getCount中返回yourData.size + 1。

在getViewType中,检查元素是否为最后一个元素,返回2;否则返回false。

在getView中使用此类型来填充模拟视图。


-2

我想您只想向最后一项添加边距:

因此,您可以以这种方式进行操作,在您的getview方法中,对列表项的索引进行检查,并检查其是否为最后一项,然后以编程方式向视图添加边距。


我已经在“将底部边距添加到适配器实现的最后一项”中对此进行了描述。我想知道是否还有更优雅的方法。
darja

为什么您不想这样做?
高飞

请参阅有问题的说明。
darja

没有其他想法-这似乎是唯一的方法
-darja

@Goofy如何将边距添加到列表的最后一行视图?
vrunoa 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.