向ListView最后一个元素添加底部边距
我需要添加添加与复杂的项目背景ListView:不同的顶部和底部的偶数/奇数和圆angular。 它看起来像这样:
我已经通过级别列表实现了所有这些东西,但还有一件事是我想要做的。 现在底部项目靠近屏幕的底部。 增加一些空间比较好。
我不想向ListView添加底部边距,我只需要为最后一个项目保证金。
我看到这样做的方式:
页脚
一种黑客 – 添加空的TextView到ListView的页脚。 但是页脚是相当不稳定的东西,它们通常会在notifyDataSetChanged后消失,并且无法让它们返回
具有透明像素的图像
我问devise师添加透明像素底部的背景资源。 不幸的是,在这种情况下,垂直对中被完全破坏。 例如,有这样的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
,设置paddingBottom
和clipToPadding="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方法中列表项的索引,并检查它是否是最后一个项目,然后编程为视图添加页边距。