如何在android listview中的项目之间添加空格?

时间:2013-05-15 03:04:55

标签: android listview user-interface

我想在列表视图中的每个项目之间添加填充,但我想保留默认的分隔符,因为我认为它在美学上是令人愉悦的。任何更宽的东西都看起来很难看。

我目前有:

<com.example.practice.MyListView
    android:id="@+id/list"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:drawSelectorOnTop="false"
    android:layout_below="@id/name" />

现在,我尝试使用透明分隔符,这成功获得了我想要的间距,但后来我没有看到这条小线。如果我不使用透明分隔线而不是我有一条巨大的粗糙线条。我想保持显示的默认行,只需在每个listview项的顶部添加一些间距。

7 个答案:

答案 0 :(得分:27)

你将无法实现你想要的那么简单。

第一步:将分隔线设置为透明,并使高度更大:

<ListView
    android:id="@+id/list"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:divider="@android:color/transparent"
    android:dividerHeight="8dp"/>

第二步:为了实现'小线'效果,你可以添加一个自定义drawable作为列表视图项背景,比如列表视图项被定义为'list_item.xml':

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
<-- Add a Custom background to the parent container of the listview items -->
android:background="@drawable/list_item_selector"
android:orientation="vertical" >
<-- Rest of the item layout -->
</LinearLayout>

当然,那个项目可以是你喜欢的任何东西,我的是:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >

<item>
  <shape 
    android:shape="rectangle">
        <stroke android:width="1dp" android:color="@color/bg_gray" />
        <solid android:color="@android:color/white" />
    </shape>
</item>
<item android:bottom="1dp"> 
    <shape 
        android:shape="rectangle">
        <stroke android:width="1dp" android:color="#FFDDDDDD" />
        <solid android:color="#00000000" />
    </shape>
</item>
</layer-list>

但那会禁用'Holo Selector'效果,无论何时点击或突出显示列表视图中的项目,都会有一个Holo Blue颜色,这就是为什么如果你在列表项背景上注意到我们没有我们使用了一个名为'list_item_selector'的选择器。

这是选择器,它在未按下时使用可绘制的图层列表,并在按下时使用全蓝色:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
  <item 
    android:state_pressed="false"
    android:drawable="@drawable/list_item_bg2"        
    />
 <item android:state_pressed="true"
    android:drawable="@color/holo_blue"
    />
</selector>

编辑评论

绝对可以,您可以为列表视图项定义设置高度,但是,建议设置最小高度,而不是永远不会更改的预定义高度。

说这是我的列表项布局:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >

<ImageView
    android:id="@+id/grid_image"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_centerVertical="true"
    android:src="@drawable/ic_launcher" />

<TextView
    android:id="@+id/grid_text"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_centerVertical="true"
    android:gravity="center_vertical"
    android:layout_toRightOf="@+id/grid_image"
    android:minHeight="48dp"
    android:padding="8dp"
    android:textIsSelectable="false" />

</RelativeLayout>

所有需要的都是,

第一步:根据您的喜好,在values /文件夹中包含的dimens.xml文件中定义最小高度或最大高度。为什么?因为高度应该根据布局明确改变,并且您可以为每个设备密度定义不同的dimens.xml。

在dimens.xml中的

,说:

<resources>

<!-- List Item Max and Min Height -->

    <dimen name="list_item_min_height">48dp</dimen>
    <dimen name="list_item_max_height">96dp</dimen>
    <dimen name="list_item_set_height">64dp</dimen>

</resources>

然后使用列表项布局的父LinearLayout的任何值。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="@dimen/list_item_min_height" >

这就是那个话题,现在以文本为中心,它甚至更简单:

  • 如果您使用的是TextView并将其包装到RelativeLayout中,请使用:android:layout_centerVertical="true"

  • 如果您使用的是LinearLayout,请使用:android:layout_gravity="center_vertical"

并将其与:注意仅当您未将高度设置为wrap_content时才有效,否则无关紧要。

  android:gravity="center_vertical"

希望有所帮助。

答案 1 :(得分:1)

我不知道我是否理解你的问题。 如果你想让分隔线透明,那么你会看到每个ListView之间的背景平静,所以它在滚动时会产生一种3D效果。你可以这样做:

在list_item xml中,为LinearLayout提供所需的背景颜色,例如:

<LinearLayout 
android:id="@+id/listItem"
android:layout_width="match_parent"
android:layout_height="match_parent"    
android:padding="4dip"
android:orientation="horizontal"
android:background="#FFFFFF"
>

然后给你的ListView背景颜色如下:

<ListView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/fragmentListView"
android:layout_width="match_parent" 
android:layout_height="match_parent"
android:divider="@android:color/transparent"
android:dividerHeight="8dip"
android:background="#0000FF"
android:cacheColorHint="@android:color/transparent"
android:drawSelectorOnTop="true"
/>

现在您的ListView滚动背景

我希望这就是你想要的。

答案 2 :(得分:1)

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

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

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

答案 3 :(得分:1)

你可以简单地使用divider

请参阅以下示例

  <ListView
    android:id="@+id/activity_main_listview_data"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:divider="@android:color/transparent"
    android:dividerHeight="10dp"
    />

这里,在android:divider中你可以设置颜色或使其透明,在dividerHeight中为项目之间添加spce。

答案 4 :(得分:0)

对于那些希望分隔符可见且仍希望添加更多空间的人来说,这是一个解决方案。要完全摆脱分隔符,请将其设置为@null并将dividerHeight设置为0dp。这是一个通用的矿山ListView。

<ListView
    android:id="@+id/myListView"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#ff0000"
    android:divider="@null"
    android:dividerHeight="0dp"
    android:layout_alignLeft="@+id/txtMake"
    android:layout_below="@+id/txtMake"
    android:fadeScrollbars="false"
    android:scrollbarThumbVertical="@drawable/scroll_bar_color"
    android:scrollbarStyle="outsideInset" >
</ListView>

接下来,转到使用适配器的xml文件,以填充列表视图。转到您的容器(示例RelativeLayout ...),然后添加以下内容。

    android:layout_marginTop="15dp"

这实际上会为那些没有使用分隔符的人增加空间。与仅增加盒子大小的填充不同,这将增加每个项目之间的距离。

答案 5 :(得分:0)

在XMLfile中的ListView标记内添加dividerHeight标记,并为其指定一个值(列表项之间的间距)。

它会在列表项之间为您提供合适的空间。

代码:

<ListView
    android:id="@+id/listid"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@android:color/transparent"
    android:divider="@drawable/divi"
    android:dividerHeight="60dp"></ListView>

现在创建一个可绘制的XML文件(在这种情况下,name是divi)。在里面添加一个stroke标签并给它一个宽度,这样做。

代码:

<shape
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="line">
    <stroke
        android:width="1dp"
        android:color="#000000"
         />
</shape>

答案 6 :(得分:0)

android:layout_width="match_parent"
android:textColor="@color/colorPrimary"
android:textSize="30dp"
android:layout_height="wrap_content"

完成Code Here