Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/183.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android ListView填充内容而不移动ListView高度?_Java_Android_Listview - Fatal编程技术网

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

Java Android ListView填充内容而不移动ListView高度?,java,android,listview,Java,Android,Listview,我有一个列表视图,里面有一堆项目。如何使顶部和底部项目的顶部边缘为10dp,底部项目的底部边缘为10dp?现在我可以在ListView上使用填充或边距来实现这一点,但结果是,当您滚动ListView的边缘时,现在距离屏幕底部的距离为10dp。不管怎么说,关于这个?我还尝试在适配器的getView方法中设置边距,但没有看到AblistView.LayoutParams的任何边距选项。任何帮助都会很好 谢谢为什么不检查项目相对于列表大小的位置: 填充: public View getView(in

我有一个列表视图,里面有一堆项目。如何使顶部和底部项目的顶部边缘为10dp,底部项目的底部边缘为10dp?现在我可以在ListView上使用填充或边距来实现这一点,但结果是,当您滚动ListView的边缘时,现在距离屏幕底部的距离为10dp。不管怎么说,关于这个?我还尝试在适配器的getView方法中设置边距,但没有看到AblistView.LayoutParams的任何边距选项。任何帮助都会很好


谢谢

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

填充:

 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" />