在Android中的顶部ListView项目(以及最后一个)上方添加边距

Mic*_*rne 143 android android-layout android-listview

这是关于Android中ListView中项目布局的一个非常好的问题.

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

我已经尝试将填充添加到ListView本身,但是当您滚动列表时它会在填充的边缘消失.

我来自web开发背景,类比是在第一个列表项(和最后一个列表项下方)之上添加边距.

Gun*_*son 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"/>
Run Code Online (Sandbox Code Playgroud)

android:clipToPaddingViewGroup布局和视图容器的基类的XML属性.

相关的方法调用是:

public void setClipToPadding (boolean clipToPadding)
Run Code Online (Sandbox Code Playgroud)

  • 不要忘记``android:scrollbarStyle ="outsideOverlay"``所以滚动条也会一直穿过填充 (5认同)
  • 另外,这可以通过`<item name ="android:clipToPadding"> false </ item>制作成样式或主题. (4认同)
  • 有点讨论,但请注意,在较旧的设备上(我在某些2.3.x设备上发现它),列表项视图很快就会被回收.虽然绘图阶段知道它可以在那里绘制,但布局阶段没有,因此它认为该项目已经在屏幕外.请参阅http://stackoverflow.com/questions/15915226/when-using-cliptopadding-in-listviews-the-items-get-recycled-prematurely. (4认同)
  • 哦,这也适用于ScrollView (2认同)

Jak*_*son 19

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);
Run Code Online (Sandbox Code Playgroud)

上面的ListView将有一个20像素的页眉和页脚填充.

  • 谢谢你的回答!效果很棒!! 如果你想在dp中放置高度,可以使用DisplayMetrics来完成:`float mDensity = getResources().getDisplayMetrics().density; int height =(int)(50*mDensity + 0.5f); padding.setHeight(高度);` (4认同)
  • 或者更好的是,使用getResources()获取Java级别的dp维度.getDimensionPixelOffset(R.dimen.some_value); (3认同)

gre*_*gkb 10

附件@ Jakobud的回答......

我的listView已经利用这些android:divider/android:dividerHeight属性在listView项之间创建了透明的空白.这允许我简单地添加android:headerDividersEnabledandroid:footerDividersEnabled属性并设置页眉和页脚视图new View(Activity.this).

对于已经在listView中设置了分隔符的情况,可以进行简化.