ListView Items Android之间的间距

我试图在listView上使用marginBottom来在listView Item之间留出空间,但是仍然把这些项目连接在一起。

这甚至有可能吗? 如果是的话,有没有一个具体的方法来做到这一点?

我的代码如下

<LinearLayout android:id="@+id/alarm_occurences" android:layout_width="fill_parent" android:orientation="vertical" android:layout_height="fill_parent" android:background="#EEEEFF" xmlns:android="http://schemas.android.com/apk/res/android"> <ListView android:id="@+id/occurences" android:layout_width="fill_parent" android:layout_height="fill_parent" /> </LinearLayout> 

我的自定义列表项目:

 <com.android.alarm.listItems.AlarmListItem xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="@drawable/alarm_item_background" android:layout_marginBottom="10dp" > <CheckedTextView android:id="@android:id/text1" android:layout_width="fill_parent" android:layout_height="wrap_content" android:gravity="center_vertical" android:checkMark="?android:attr/listChoiceIndicatorMultiple" android:textSize="20sp" android:textStyle="bold" android:typeface="serif" android:padding="10dp" /> </com.android.alarm.listItems.AlarmListItem> 

在这种情况下,我怎样才能在列表项之间进行间隔?

@Asahi几乎击中了头,但我只是想为以后通过谷歌漂浮在这里的任何人添加一点XML:

 <ListView android:id="@+id/MyListView" android:layout_height="match_parent" android:layout_width="match_parent" android:divider="@android:color/transparent" android:dividerHeight="10.0sp"/> 

由于某些原因,诸如“10”,“10.0”和“10sp”之dividerHeight值都被Android拒绝给dividerHeight值。 它需要一个浮点数和一个单位,如“10.0sp”。 正如@Goofyahead所指出的那样,您也可以使用与显示无关的像素(即“10dp”)。

也许dividerdividerHeight属性的ListView可以解决你的问题。

尽pipeNik Reiman的解决scheme能够发挥作用,但我发现它并不是我想做的最佳解决scheme。 使用分隔线来设置边距时,问题是分隔线将不再可见,因此您无法使用它来显示您的项目之间的清晰边界。 另外,它不会为每个项目添加更多的“可点击区域”,因此如果您希望让您的项目可点击并且您的项目很薄,任何人都很难点击一个项目,因为分隔线添加的高度不是一个项目的一部分。

幸运的是,我发现了一个更好的解决scheme,可以让你既显示分隔符,又可以调整每个项目的高度,而不是使用边距而是填充。 这里是一个例子:

列表显示

 <ListView android:id="@+id/listView" android:layout_width="fill_parent" android:layout_height="fill_parent" /> 

列表项

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="10dp" android:paddingTop="10dp" > <TextView android:id="@+id/textView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:text="Item" android:textAppearance="?android:attr/textAppearanceSmall" /> </RelativeLayout> 

你应该包装你的ListView项目(比如说your_listview_item )在一些其他的布局,例如LinearLayout并添加margin到your_listview_item

 <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent"> <your_listview_item android:id="@+id/list_item" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_marginTop="5dp" android:layout_marginBottom="5dp" android:layout_marginLeft="5dp" android:layout_marginRight="5dp" ... ... /> </LinearLayout> 

这样,您还可以在ListView项目的左侧和右侧添加空间(如果需要)。

如果你想显示一个带有边距的分频器,而没有扩展它 – 使用InsetDrawable(大小必须是一个格式,关于哪个@Nik Reiman):

列表显示:

 <ListView android:id="@+id/listView" android:layout_width="fill_parent" android:layout_height="wrap_content" android:cacheColorHint="#00000000" android:divider="@drawable/separator_line" android:dividerHeight="10.0px"/> 

@绘制/ separator_line:

 <?xml version="1.0" encoding="utf-8"?> <inset xmlns:android="http://schemas.android.com/apk/res/android" android:insetLeft="5.0px" android:insetRight="5.0px" android:insetTop="8.0px" android:insetBottom="8.0px"> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> <gradient android:startColor="@color/colorStart" android:centerColor="@color/colorCenter" android:endColor="@color/colorEnd" android:type="linear" android:angle="0"> </gradient> </shape> </inset> 

我的解决scheme增加更多的空间,但保持水平线是在res/drawable文件夹中添加divider.xml ,并在里面定义线形:

divider.xml

 <?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="line" > <stroke android:width="1px" android:color="@color/nice_blue" /> </shape> 

然后在我的列表中,我参考我的分隔线如下:

 <ListView android:id="@+id/listViewScheduledReminders" android:layout_width="match_parent" android:layout_height="0dip" android:layout_marginBottom="@dimen/mediumMargin" android:layout_weight="1" android:divider="@drawable/divider" android:dividerHeight="16.0dp" android:padding="@dimen/smallMargin" > </ListView> 

注意android:dividerHeight="16.0dp"通过增加和减less这个高度,我基本上在分割线的顶部和底部添加更多的填充。

我用这个页面作为参考: http : //developer.android.com/guide/topics/resources/drawable-resource.html#stroke-element

您可以使用:

 android:divider="@null" android:dividerHeight="3dp" 

例:

 <ListView android:layout_width="fill_parent" android:layout_height="wrap_content" android:id="@+id/listView" android:layout_gravity="center_horizontal" android:dividerHeight="3dp" android:divider="@null" android:clickable="false"/> 

我意识到已经select了一个答案,但我只是想分享一下当我遇到这个问题时最终为我工作的东西。

我有一个listView,其中listView中的每个条目都是由其自己的布局定义的,类似于Sammy在他的问题中发布的内容。 我尝试了改变分隔高度的build议方法,但是,即使使用了不可见的分隔线,也不会看起来太漂亮。 经过一番实验之后,我简单地在XML文件的最后一个TextView布局元素中添加了一个android:paddingBottom="5dip" ,该元素定义了各自的listView条目。

这最终给我正是我想通过使用android:layout_marginBottom 。 我发现这个解决scheme比试图增加分隔高度产生更美观的结果。

OP的现有代码(列表项目已经有填充)最简单的解决scheme是添加以下代码:

 listView.setDivider(new ColorDrawable(Color.TRANSPARENT)); //hide the divider listView.setClipToPadding(false); // list items won't clip, so padding stays 

这个答案对我有帮助。

注意:在旧版平台上,您可能会遇到清单项目回收过早的问题,正如此处所述 。

而不是给予保证金,你应该填补:

 <ListView android:id="@+id/listView1" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignParentTop="true" android:padding="5dp" > </ListView> 

要么

 <ListView android:id="@+id/listView1" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignParentTop="true" android:paddingTop="2dp" android:paddingLeft="1dp" android:paddingRight="1dp" android:paddingBottom="2dp" android:paddingStart="0dp" android:paddingEnd="0dp" > </ListView> 

对于我的申请,我已经这样做了

  <ListView android:id="@+id/staff_jobassigned_listview" android:layout_width="match_parent" android:layout_height="match_parent" android:divider="@null" android:dividerHeight="10dp"> </ListView> 

这是结果

在这里输入图像描述

只是android:divider =“@ null”,并提供分隔线为我做的高度。

另外一种增加列表项间距的方法是通过提供layout_height属性和所需的间距来为适配器代码添加一个空视图。 例如,为了增加列表项之间的底部间距,将这个虚拟视图(空视图)添加到列表项的末尾。

 <View android:layout_width="match_parent" android:layout_height="15dp"/> 

因此,这将在列表视图项目之间提供15 dp的底部间距。 如果父布局是LinearLayout,并且方向是垂直的,或者对其他布局采取适当的步骤,则可以直接添加此项。 希望这可以帮助 :-)

 <ListView android:clipToPadding="false" android:paddingTop="10dp" android:paddingBottom="10dp" android:dividerHeight="10dp" android:divider="@null" android:layout_width="match_parent" android:layout_height="match_parent"> </ListView> 

并将paddingToppaddingBottomdividerHeight设置为相同的值,以便在列表顶部和底部的所有元素和空间之间获得相等的间距。

我将clipToPadding设置为false以使视图在此填充区域中绘制。

我将divider设置为@null以删除列表元素之间的行。

我发现一个不太好的解决scheme,因为你使用的是一个Horizo​​ntalListView,因为分隔符似乎不能用,但是我认为它可以用于更常见的ListView。

只需添加:

 <View android:layout_marginBottom="xx dp/sp"/> 

在适配器类中膨胀的布局视图将在项目之间创build间距

为了给列表视图内的视图间隔,请使用填充视图的填充。

你可以在你的视图中使用android:paddingBottom="(number)dp" && android:paddingTop="(number)dp" ,或者在你的listview中充气。

分频器解决scheme只是一个修复,因为有一天,当你想要使用分频器的颜色(现在是透明的),你会看到分频器线被拉长。

你只需要使背景透明的列表分隔符,并根据你所需要的差距,使高度。

 <ListView android:id="@+id/custom_list" android:layout_height="match_parent" android:layout_width="match_parent" android:divider="#00ffffff" android:dividerHeight="20dp"/> 

很多这些解决scheme的工作。 然而,如果你想要的只是能够设置项目之间的差距,我想出了最简单的方法是在LinearLayout中包装你的项目 – 在你的情况下CheckedTextView – 并把你的边缘格式的项目,不是根部布局。 一定要给这个包装布局一个id,并在你的适配器中与你的CheckedTextView一起创build它。

而已。 实际上,您正在实例化ListView的项目级别的边距。 因为ListView不知道任何项目布局 – 只有你的适配器。 这基本上膨胀了以前被忽略的项目布局的一部分。