首页 文章

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

提问于
浏览
141

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

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

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

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

5 回答

  • 1

    你写了:

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

    相关的method call是:

    public void setClipToPadding (boolean clipToPadding)
    
  • 10
    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像素的页眉和页脚填充 .

  • 19

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

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

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

  • 2

    我的解决方案使用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);
    
  • 387

    @Gunnar Karlsson的答案是好的,但是当完全在填充后面但是还没有完全离开屏幕时,有一个细胞视图被过早回收的问题 . 设置clipToPadding = false是对此负责的,可能会或可能不会在未来的android版本中修复 . (When using clipToPadding in ListView's the items get recycled prematurely

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

    • 将外部(线性或相对)布局添加到您的cell_design.xml

    • 在此外部布局上添加填充(即10dip)以在整个单元格周围创建"margin" . (N.B.只有填充可以工作,而不是外部布局上的边距)

    • 在ListView上设置 android:dividerHeight="-10dip" ,与单元格周围的相反

    与其他答案相比,无需设置分频器颜色 . 将存在最顶部和最底部单元的填充,并且负分隔器将防止其间的双高度分隔器 .

相关问题