Java Android ListView填充内容而不移动ListView高度?
我有一个列表视图,里面有一堆项目。如何使顶部和底部项目的顶部边缘为10dp,底部项目的底部边缘为10dp?现在我可以在ListView上使用填充或边距来实现这一点,但结果是,当您滚动ListView的边缘时,现在距离屏幕底部的距离为10dp。不管怎么说,关于这个?我还尝试在适配器的getView方法中设置边距,但没有看到AblistView.LayoutParams的任何边距选项。任何帮助都会很好Java Android ListView填充内容而不移动ListView高度?,java,android,listview,Java,Android,Listview,我有一个列表视图,里面有一堆项目。如何使顶部和底部项目的顶部边缘为10dp,底部项目的底部边缘为10dp?现在我可以在ListView上使用填充或边距来实现这一点,但结果是,当您滚动ListView的边缘时,现在距离屏幕底部的距离为10dp。不管怎么说,关于这个?我还尝试在适配器的getView方法中设置边距,但没有看到AblistView.LayoutParams的任何边距选项。任何帮助都会很好 谢谢为什么不检查项目相对于列表大小的位置: 填充: public View getView(in
谢谢为什么不检查项目相对于列表大小的位置: 填充:
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);
例:
如果您已经为您的适配器正确地实现了getCount()方法,则可以这样做 您可以使用页眉和页脚在滚动区域内的ListView的顶部和底部获得空间。下面是一个简单的例子: 定义我命名为header\u 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"/>
然后设置适配器。诀窍是在视图定义中包括
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" />
令人讨厌的建议,但是第一个/最后一个项目视图的顶部/底部填充如何?您必须在getView
中的所有视图上检查并设置它……这正是我想要的,而且是一个简单的解决方案。这很好,我正在构建Android 2.1-update1。为什么只在Android 3.0+中?根据Android的参考资料,这个特性从一开始就存在(API级别1):lol花了45分钟试图让它与各种填充和边距设置一起工作。甚至有人使用了Cliptopladding,但误解了它并将其设置为真:)感谢在浪费2-3个小时弄清楚填充物的工作原理后,终于找到了一个有效的解决方案;\u;非常好,我相信所有的android版本,而使用clipToPadding(上面的解决方案)只在特定的androd版本上有效有用的答案,谢谢!我编辑它只是为了消除不必要的复杂性。一个简单的视图
就可以了-在另一个线性布局
中不需要线性布局
。这是一个很好的解决方案。使用G+类型的标题(在向下滚动时向上滚动,在向上滚动时向下滚动)使得不可能有headerview,也不可能对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);
<ListView android:id="@+id/list"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingTop="16dip"
android:paddingBottom="16dip"
android:clipToPadding="false" />