12

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

我目前有:

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

现在,我尝试使用透明分隔线,这成功地获得了我想要的间距,但是我看不到那条小线。如果我不使用透明分隔线,我就会有一条又粗又丑的线。我想保持显示的默认行,并在每个列表视图项的顶部添加一些间距。

4

7 回答 7

31

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

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

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

但这会禁用“全息选择器”效果,每当您单击或突出显示列表视图上的项目时,都会在其上绘制全息蓝色,这就是为什么如果您注意到我们没有使用的列表项背景一个可绘制的图层列表,我们使用了一个名为“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"

希望有帮助。

于 2013-05-15T03:15:22.550 回答
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在你的背景上滚动

我希望这是你想要的。

于 2013-12-08T12:51:43.997 回答
1

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

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

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

于 2015-08-28T08:47:07.600 回答
1

你可以简单地使用分隔符

看下面的例子

  <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。

于 2017-03-14T08:19:12.563 回答
0

对于那些希望分隔线可见但仍想增加更多空间的人来说,这是一个解决方案。要完全摆脱分隔线,请将其设置为 @null 并将 dividerHeight 设置为 0dp。这是一个通用的地雷列表视图。

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

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

于 2013-12-13T08:10:56.287 回答
0
android:layout_width="match_parent"
android:textColor="@color/colorPrimary"
android:textSize="30dp"
android:layout_height="wrap_content"

完整代码在这里

于 2020-05-04T07:55:11.957 回答
0

ListView在 XMLfile的标签内添加一个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 文件(在本例中名称为 divi)。在它里面添加一个stroke标签并给它一个宽度,这样就可以了。

代码:

<shape
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="line">
    <stroke
        android:width="1dp"
        android:color="#000000"
         />
</shape>
于 2017-06-21T12:27:09.607 回答