如何将填充分配给Listview项目分隔线


75

在此处输入图片说明

当我在图像中显示时,如何给列表项添加填充。我想在布局中制作分隔线,如图所示。

这是我的列表片段代码

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" 
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_marginLeft="25dp"
android:layout_marginRight="25dp">

 <ListView 
    android:layout_height="wrap_content"
    android:layout_width="fill_parent"
     android:id="@+id/listV_main"
    android:layout_marginLeft="25dp"
android:layout_marginRight="25dp"/>

这是我的列表部分代码

<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:paddingLeft="10dp"
android:paddingTop="10dp"
android:paddingRight="10dp"
android:paddingBottom="10dp">
<include
    android:id="@+id/list_item_section_text"
    layout="@android:layout/preference_category"
     />

这是我的清单项目代码

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:minHeight="?android:attr/listPreferredItemHeight"
android:adjustViewBounds="true"
android:paddingRight="?android:attr/scrollbarSize"
   >
<ImageView
    android:id="@+id/showlist_item_entry_drawable"
    android:layout_width="82dp"
    android:adjustViewBounds="true"
    android:layout_height="68dp"
    android:scaleType="fitXY"
    android:paddingLeft="9dp"/> 
<RelativeLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginLeft="10dip"
    android:layout_marginRight="6dip"
    android:layout_marginTop="6dip"
    android:layout_marginBottom="6dip"
    android:layout_weight="1"
>
    <TextView android:id="@+id/list_item_entry_title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:singleLine="true"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:ellipsize="marquee"
        android:fadingEdge="horizontal" /> 
    <TextView android:id="@+id/list_item_entry_summary"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/list_item_entry_title"
        android:layout_alignLeft="@id/list_item_entry_title"
        android:textAppearance="?android:attr/textAppearanceSmall"
        android:singleLine="true"
        android:textColor="?android:attr/textColorSecondary" />
</RelativeLayout>


3
只是关于您的getView方法的简短评论-您应该使用给定的convertView,而不是每次getView运行时都使用inflate。
2014年

Answers:


215

使用'插入' .....

(list_divider.xml)

<?xml version="1.0" encoding="UTF-8"?>
<inset xmlns:android="http://schemas.android.com/apk/res/android"
    android:insetLeft="50dp"
    android:insetRight="50dp" >

 <shape>
    <solid android:color="@color/orange" />
    <corners android:radius="2.0dip" />
</shape>

</inset>

并在列表视图中添加如下所示...

<ListView
    android:dividerHeight="2dp"
    android:divider="@drawable/list_divider"
    ...
/>

您可以根据需要设置插入值...

更新

如@Giulio Piancastelli所指出的,如果列表容器的背景与列表项目的背景不同,则可以使用“ layer-list” ...

(list_divider.xml)

  <?xml version="1.0" encoding="utf-8"?>
  <layer-list xmlns:android="http://schemas.android.com/apk/res/android" >  
   <item>
        <shape android:shape="rectangle" >
            <solid android:color="@color/list_background" />
        </shape>
    </item>


    <item
        android:left="10dp"
        android:right="10dp">
        <shape android:shape="rectangle" >
            <solid android:color="@color/divider_color"/>
        </shape>
    </item>

        </layer-list>

并在列表视图中添加如下所示...

<ListView
    android:dividerHeight="2dp"
    android:divider="@drawable/list_divider"
    ...
/>

1
Android确实需要insetEnd =“ @ dimen / inset_end”没有insetStart和insetEnd,这将变得很复杂。
埃里克·科克伦

3
当列表容器的背景与列表项的背景不同时,这将不起作用。当插入物用作列表分隔符时,它留下的空间是透明的,因此通过它可以看到列表容器的背景,而不是与列表项的背景无缝融合。与layer-list本页其他地方提出的基于-解决方案相反,我认为您的解决方案在这种情况下永远无法工作。
Giulio Piancastelli 2014年

18

您需要填充分隔线吗?创建您的自定义可绘制形状为:

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

    <item
        android:left="10dp"
        android:right="10dp">
        <shape android:shape="rectangle" >
            <solid android:color="@android:color/black" />
        </shape>
    </item>

</layer-list>

并设置为xml中ListView的分隔线:

<ListView
    android:dividerHeight="2dp"
    android:divider="@drawable/custom_divider"
    ...
/>

UPD

我只是ListView在xml中:

<ListView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@android:id/list"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:dividerHeight="2dp"
android:divider="@drawable/line"
/>

分频器作为line.xmldrawable

<?xml version="1.0" encoding="utf-8"?>
    <layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
        <item
        android:left="10dp"
        android:right="10dp">
        <shape android:shape="rectangle" >
            <solid android:color="@android:color/black" />
        </shape>
    </item>
</layer-list>

不要对ListViewin代码进行任何修改。如果资源构建错误,则可以尝试使用“清理”


什么是custom_color?而且我必须在drawable中创建xml?
Swap-IOS-Android

我尝试了您的解决方案,但仍显示相同的列表视图
Swap-IOS-Android

@SwapAndroid我更新我的答案。最好的方法是使用shape =“ rectangle”。custom_color-它是分隔线的颜色(我更改了标准Android黑色)。
nfirex 2012年

不适合我...我在主要问题上添加了Entry适配器代码。
Swap-IOS-Android

使用该xml代码,我得到的结果是:dl.dropbox.com/u/17900041/device-2012-12-27-164024.png 是否需要类似的东西?
nfirex 2012年

4

正如@Giulio Piancastelli在@ASP答案下提到的那样,<inset>当列表容器的背景色与列表中的行不同时,失败。一种解决方案是使用<layer-list>如下所示:

//This item is to overlay the container colour with the row background colour
<item
    android:left="0dp"
    android:right="0dp">
    <shape android:shape="rectangle" >
        <solid android:color="@color/row_background" />
    </shape>
</item>

//This item is the divider, put it at bottom so it will overlay the background colour
<item
    android:left="92dp"
    android:right="0dp">
    <shape android:shape="rectangle" >
        <solid android:color="@color/divider
    </shape>
</item>

然后,您可以将其设置为除法器,如大多数答案所建议:

<ListView
    android:dividerHeight="2dp"
    android:divider="@drawable/layer_list"
    ...
/>

0

在您的列表项中,将paddingtop设置为主要布局,如下所示:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
   android:padding="10dp"
   ....// Remaining fields
>
... //Remaining items
</LinearLayout>

它不起作用..我添加了padding =“ 10”但仍然相同..在输入项的左侧和右侧没有填充
Swap-IOS-Android

@SwapAndroid,试试这一个
拉姆基兰

0

这应该是此问题的替代解决方案:

<View 
   android:layout_width="match_parent"
   android:layout_height="1dp"
   android:layout_alignParentBottom="true"
   android:background="color/secondary_text"
   android:layout_marginTop="16dp" />

-4

设置列表项分隔线的高度和颜色:

<ListView 
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:id="@+id/listV_main"
android:layout_marginLeft="25dp"
android:layout_marginRight="25dp"
android:divider="@android:color/darker_gray"
android:dividerHeight="1dp"/>

我只是说,对于<ListView>:android:divider =“ @ android:color / darker_gray” android:dividerHeight =“ 1dp”正常。使用ArrayAdapter的android.R.layout.simple_item1布局创建新的ListView,您将看到它的工作原理。因此可能是您的自定义商品中的问题
Kiryl Ivanou 2012

我已经添加了我的入口适配器代码..您能建议任何解决方案吗
Swap-IOS-Android

我只是建议创建一个简单的ListView mListView =(ListView)findViewById(R.id.listV_main); mListView.setAdapter(new ArrayAdapter(mContext,android.R.layout.simple_list_item_1,new String [] {“ item1”,“ item2”,“ item3”}))); 我已经为您的ListView检查了它;)当然可以正常工作,显示分隔线),所以只需在创建的列表项中搜索问题,祝您好运!)
Kiryl Ivanou 2012
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.