在Android中,在顶部ListView项目(和最后一个)之上添加保证金

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

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

我已经尝试添加填充ListView本身,但随后当您滚动列表它消失在边缘的填充。

我来自一个web开发背景,类比将是在第一个列表项目(和最后一个列表项目之下)之上添加保证金。

你写了:

我已经尝试添加填充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属性,它是布局和视图容器的基类。

相关的方法调用是:

 public void setClipToPadding (boolean clipToPadding) 
 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将有一个20像素的页眉和页脚填充。

Appendage to @ Jakobud's answer …

我的listView已经使用android:divider/android:dividerHeight属性来创buildlistView项目之间的透明间隙。 这允许我简单地添加android:headerDividersEnabledandroid:footerDividersEnabled属性,并将Header和Footer视图设置为new View(Activity.this)

对于已经在listView中设置了分隔符的情况稍微简化一下。

我的解决scheme使用ListFragment ,基于@Jakobud和@ greg7gkb的解决scheme。

 ListView listView = getListView(); listView.setDivider(null); listView.setDividerHeight(getResources().getDimensionPixelSize(R.dimen.divider_height)); listView.setHeaderDividersEnabled(true); listView.setFooterDividersEnabled(true); View padding = new View(getActivity()); listView.addHeaderView(padding); listView.addFooterView(padding); 

@Gunnar Karlsson的回答很好,但是有一个单元格视图会在填充完成后过早回收,但还没有完全离开屏幕。 设置clipToPadding = false是负责这个,可能或可能不固定在未来版本的android。( 当在ListView中使用clipToPadding的项目过早回收 )

我有一个很好的简单的解决scheme,没有副作用:

  1. 将一个外部(线性或相对)布局添加到您的cell_design.xml
  2. 在这个外部布局添加填充(即10dip),以在整个单元格周围创build“边距”。 (注意只有填充将起作用,而不是外部布局上的边距)
  3. 在ListView中设置android:dividerHeight="-10dip" ,与单元周围相反

与其他答案相比,不需要设置分隔线颜色。 在最上面和最下面的单元格中的填充将出现,而负分隔符将防止二者之间的高度分隔符。