在Android中的顶部ListView项目(以及最后一个)上方添加边距
这是关于Android中ListView中项目布局的一个非常好的问题。
我有一个活动,顶部有一个标题栏,ListView占据了屏幕的其余部分。 我希望我的ListView在左侧,右侧和顶部显示10dp填充,但是当您向上滚动ListView时,我希望它覆盖顶部10dp填充,然后在褪色边缘消失。 同样,当你滚动到底部时,最后一个列表项应该在最后一个列表项的底部和屏幕的实际底部之间显示10dp(如果你想知道为什么,那是因为我想要一个漂亮的背景图像 在ListView周围探索)。
我已经尝试将填充添加到ListView本身,但是当您滚动列表时它会在填充的边缘消失。
我来自web开发背景,类比是在第一个列表项(和最后一个列表项下方)之上添加边距。
5个解决方案
387 votes
你写了:
我已经尝试将填充添加到ListView本身,但是当您滚动列表时它会在填充的边缘消失。
将ViewGroup ViewGroup属性设置为false.这将启用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"/>
ViewGroup是ViewGroup的XML属性,它是布局和视图容器的基类。
相关的方法调用是:
public void setClipToPadding (boolean clipToPadding)
Gunnar Karlsson answered 2019-05-16T04:45:33Z
19 votes
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像素的页眉和页脚填充。
Jake Wilson answered 2019-05-16T04:45:58Z
10 votes
附件@ Jakobud的回答......
我的listView已经使用了android:divider/android:dividerHeight属性来创建listView项之间的透明空白。 这允许我简单地添加android:headerDividersEnabled和android:footerDividersEnabled属性并将页眉和页脚视图设置为new View(Activity.this)。
对于已经在listView中设置了分隔符的情况,可以进行简化。
greg7gkb answered 2019-05-16T04:46:41Z
2 votes
我的解决方案使用ListFragment,基于@Jakobud和@ greg7gkb的解决方案。
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);
hleinone answered 2019-05-16T04:47:09Z
1 votes
@Gunnar Karlsson的答案是好的,但是当完全在填充后面但是还没有完全离开屏幕时,有一个细胞视图被过早回收的问题。 设置clipToPadding = false对此负责,可能会或可能不会在未来的android版本中修复。(在ListView中使用clipToPadding时,项目会过早回收)
我有一个很好的简单解决方案,没有副作用:
将外部(线性或相对)布局添加到您的cell_design.xml
在此外部布局上添加填充(即10dip)以在整个单元格周围创建“边距”。 (N.B.只有填充可以工作,而不是外部布局上的边距)
在ListView上设置android:dividerHeight="-10dip",与单元格周围的相反
与其他答案相比,无需设置分频器颜色。 将存在最顶部和最底部单元的填充,并且负分隔器将防止其间的双高度分隔器。
James answered 2019-05-16T04:48:26Z