向ListView最后一个元素添加底部边距

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

ListView顶部

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

ListView底部看起来不太好

我不想向ListView添加底部边距,我只需要为最后一个项目保证金。

我看到这样做的方式:

页脚

一种黑客 – 添加空的TextView到ListView的页脚。 但是页脚是相当不稳定的东西,它们通常会在notifyDataSetChanged后消失,并且无法让它们返回

具有透明像素的图像

我问devise师添加透明像素底部的背景资源。 不幸的是,在这种情况下,垂直对中被完全破坏。 例如,有这样的9patch:

9patch

和这样的布局:

<?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概念应该是可能的,但我找不到实现。 可能有人知道?

任何其他的想法?

在你的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"

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

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

钟匠的答案是最好的,非常聪明。 您也可以创build一个空的页脚视图。

你也可以从代码中做到这一点,例如,在这里我对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); } 

我想你只想添加保证金到最后一个项目:

所以你可以这样做,在你的getview方法中列表项的索引,并检查它是否是最后一个项目,然后编程为视图添加页边距。

Interesting Posts