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()方法。