在Android中,在顶部ListView项上方(和最后一个下方)添加边距

问题描述 投票:143回答:6

这是一个有关Android ListView中项目布局的很好的问题。

我有一个活动,顶部有一个标题栏,一个ListView占据了屏幕的其余部分。我希望ListView出现在左侧,右侧和顶部带有10dp填充,但是当您向上滚动ListView时,我希望它覆盖顶部的10dp填充,然后在褪色的边缘下消失。同样,当您滚动到底部时,最后一个列表项应该在最后一个列表项的底部和屏幕的实际底部之间以10dp出现(如果您想知道为什么,那是因为我想要一张漂亮的背景图片戳出ListView)。

我尝试过将填充添加到ListView本身,但是当您滚动列表时,它会消失在填充边缘之下。

我来自网络开发人员背景,类比是在第一个列表项上方(和最后一个列表项下方)添加边距。

android android-layout android-listview
6个回答
391
投票

您写道:

我尝试过将填充添加到ListView本身,但是当您滚动列表时,它会消失在填充边缘之下。

ListView's clipToPadding属性设置为false。这将启用ListView 周围的填充,滚动到布局的末尾(而不仅是填充的边缘)。

示例:

<ListView
    android:id="@+id/list_view"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:divider="@android:color/transparent"
    android:dividerHeight="10.0sp"
    android:padding="16dip"
    android:clipToPadding="false"/>

[android:clipToPaddingViewGroup的XML属性,是布局和视图容器的基类。

相关的ViewGroup是:

method call

19
投票
public void setClipToPadding (boolean clipToPadding)

上面的ListView的页眉和页脚填充为20像素。


10
投票

@ Jakobud的答案的附录...

我的listView已经在使用View padding = new View(this); padding.setHeight(20); // Can only specify in pixels unfortunately. No DIP :-( ListView myListView = (ListView) findViewById(R.id.my_list_view); myListView.addHeaderView(padding); myListView.addFooterView(padding); myListView.setAdapter(myAdapter); 属性在listView项之间创建透明的间隙。这使我可以简单地添加android:divider/android:dividerHeightandroid:headerDividersEnabled属性,并将页眉和页脚视图设置为android:footerDividersEnabled

对于在listView中已经设置分隔器的情况,略作简化。


2
投票

基于@Jakobud和@ greg7gkb的解决方案,我的解决方案是new View(Activity.this)。>>

ListFragment

1
投票

@@ Gunnar Karlsson的回答很好,但是存在一个问题,即在完全位于填充之后但尚未完全移出屏幕时,会过早回收单元格视图。设置clipToPadding = false对此负责,并且可能会在将来的android版本中得到修复。(ListFragment

© www.soinside.com 2019 - 2024. All rights reserved.