Android ListView的填充内容而不移动ListView的高度?

我有一个列表视图里面有一堆物品。 如何使顶部和底部物品的顶部边距为10dp,底部边距为10dp? 现在我可以在ListView上使用填充或边距来做到这一点,但结果是,当您滚动ListView的边缘,现在从屏幕底部10dp。 无论如何,这个呢? 我也尝试在我的适配器的getView方法内设置边距,但是我没有看到AbsListView.LayoutParams的任何边距选项。 任何帮助将是伟大的。

谢谢

诀窍是在视图定义中包含android:clipToPadding="false" ,例如:

 <ListView android:id="@+id/list" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingTop="16dip" android:paddingBottom="16dip" android:clipToPadding="false" /> 

通过使用页眉和页脚,您可以在滚动区域内的ListView顶部和底部获得空间。 这里有一个简单的例子:

定义您的填充视图,我命名为header_footer.xml:

 <?xml version="1.0" encoding="utf-8"?> <View xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="10dp"/> 

现在你的onCreate方法看起来像这样,假设你命名了你的ListView listView

  final LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); final View headerFooter = inflater.inflate(R.layout.header_footer, null); listView.addFooterView(headerFooter); listView.addHeaderView(headerFooter); 

然后设置你的适配器。

为什么不检查项目相对于列表大小的位置:

填充:

  public View getView(int position, View convertView, ViewGroup parent) { //recycle views and whatever else you normally would do goes here.. //... //... if (position == 0){ convertView.setPadding(0, 10, 0, 0); //padding on top for top item } else if (position == getCount() - 1){ convertView.setPadding(0, 0, 0, 10); //padding on bottom for bottom item } else{ convertView.setPadding(0, 0, 0, 0); //no padding } } 

为了利润使用

 LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT); lp.setMargins(left, top, right, bottom); convertView.setLayoutParams(lp); 

例如:

 public View getView(int position, View convertView, ViewGroup parent) { //recycle views and whatever else you normally would do goes here.. //... //... LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT); if (position == 0){ lp.setMargins(0, 10, 0, 0); //margin on top for top item } else if (position == getCount() - 1){ lp.setMargins(0, 10, 0, 10); //margin on bottom for bottom item } else{ lp.setMargins(0, 0, 0, 0); //no margin } convertView.setLayoutParams(lp); } 

假设您已经为您的适配器正确实施了getCount()方法。