我有一个ListView,里面有许多项。如何使顶部和底部的项目都具有10dp的上边距和下边距?我可以在ListView上使用padding或margin来实现这一点,但结果是当您滚动时,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"/>
现在假设你把ListView命名为listView
,那么你的onCreate
方法应该如下所示:
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);
}
getView
中检查并设置所有视图... - Knickedi