如何避免列表之间的双重边界?

时间:2013-10-03 18:18:42

标签: android android-layout listview

我正在使用列表视图,其中我有一个xml引用drawable / list,如下所示:

<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
 //For the borders
    <item>
        <shape android:shape="rectangle">
            <solid android:color="@color/white" />
            <corners android:radius="0dp" />
        </shape>
    </item>
    //For the background color of cells 
    <item android:top="1px"
          android:left="0dp"
          android:right="0dp"
          android:bottom="1px">
        <shape android:shape="rectangle">
            <solid android:color="#262626" />
            <corners android:radius="0dp" />
        </shape>
    </item>
</layer-list>

上述代码主要用于定义单元格的边框和背景颜色。但是,我希望能够使用直线而不是矩形线,以便一个矩形的底部边框不会在它下面的另一个矩形的顶部边框之间留下1 dp的间隙。 请参考下图:

enter image description here

从图像中可以看出,BOK.L下方的矩形底部边框稍微偏离了显示GOOG.OQ顶部矩形边界之间的间隙。是否有办法解决这个问题,使得两个边界重叠彼此顶部并没有出现这样的双线间隙,或者是否有一种方法可以定义线形状,使得它在pic的所有单元格的上方和下方定义而没有间隙?

有任何线索吗?

谢谢! 贾斯汀

引用相同(drawable / list)的xml文件如下:

<?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"
    android:orientation="vertical"
    android:background="@drawable/list"
    android:padding="4dp"
     >



    <TextView
        android:id="@+id/symbol"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:paddingTop="2dp"
        android:paddingLeft="8dp"
        android:textColor="@color/search_autosuggest_header_text"
        foo:customFont="Roboto-Bold.ttf"
        android:singleLine="true"
        android:layout_toLeftOf="@+id/last_container"
        android:ellipsize="end"
        android:gravity="left" 
        android:textSize="14sp"/>

    <TextView
        android:id="@+id/name"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:paddingLeft="8dp"
        foo:customFont="Roboto-Regular.ttf"
        android:layout_alignParentLeft="true"
        android:layout_below="@id/symbol"
        android:layout_toLeftOf="@+id/last_container"
        android:paddingBottom="4dp"
        android:textColor="@color/search_autosuggest_item_subtitle"
        android:singleLine="true"
        android:ellipsize="end"
        android:textSize="11sp" />

    <FrameLayout
        android:id="@+id/last_container"
        android:layout_width="87dp"
        android:layout_height="wrap_content"
        android:layout_margin="1dp"
        android:layout_toLeftOf="@+id/net_change_container" >

        <TextView
            android:id="@+id/last_back"
            style="@style/TextView.ListsTextView"
            android:layout_width="87dp"
            android:layout_height="wrap_content"
            android:padding="3dp" />

        <TextView
            android:id="@+id/last"
            style="@style/TextView.ListsTextView"
            android:layout_width="87dp"
            android:textSize="12sp"
            android:layout_height="wrap_content" />
    </FrameLayout>


    <FrameLayout
        android:id="@+id/net_change_container"
        android:layout_width="80dp"
        android:layout_height="wrap_content"
        android:layout_margin="1dp"
        android:layout_toLeftOf="@+id/percent_change_container" >

        <TextView
            android:id="@+id/net_change_back"
            style="@style/TextView.ListsTextView"
            android:layout_width="80dp"
            android:layout_height="wrap_content"
            android:padding="3dp" />

        <TextView
            android:id="@+id/net_change"
            style="@style/TextView.ListsTextView"
            android:layout_width="80dp"
            android:textSize="12sp"
            android:layout_height="wrap_content" />
    </FrameLayout>

    <FrameLayout
        android:id="@+id/percent_change_container"
        android:layout_width="65dp"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_margin="1dp" >

        <TextView
            android:id="@+id/percent_change_back"
            style="@style/TextView.ListsTextView"
            android:layout_width="65dp"
            android:textSize="14sp"
            foo:customFont="Roboto-Regular.ttf"
            android:layout_height="wrap_content"
            android:padding="3dp" />

        <TextView
            android:id="@+id/percent_change"
            style="@style/TextView.ListsTextView"
            android:layout_width="65dp"
            android:textSize="12sp"
            android:layout_height="wrap_content"/>
    </FrameLayout>

</RelativeLayout>

另外,@ jboi与你的修复我得到的屏幕是:  enter image description here

3 个答案:

答案 0 :(得分:1)

您可以使用ListView参数android:dividerandroid:dividerHeight来设置所需颜色和高度的线条分隔符。

答案 1 :(得分:1)

有两条线的原因是,背景(第二层)让两端,底部和顶部的白色部分发光。因此,每个列表条目在顶部和底部都有一条白线。由于列表项之间的距离较小,因此您会看到两行。

你需要做的两件事

  • 对于每件商品,只允许一件(顶部底部)通过。因此,每个项目只能获得一行。项目的可绘制XML:

    <layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
    <item>
    <shape android:shape="rectangle">
        <solid android:color="@color/white" />
        <corners android:radius="0dp" />
    </shape>
    </item>
    <item android:top="1dp"
          android:left="0dp"
          android:right="0dp"
          android:bottom="0dp">
        <shape android:shape="rectangle">
            <solid android:color="#262626" />
            <corners android:radius="0dp" />
        </shape>
    </item>
    </layer-list>
    
  • 对于整个列表,您需要显示缺少一行的drawable。可绘制的XML看起来几乎相同。只交换底部和顶部:

    <layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
    <item>
    <shape android:shape="rectangle">
        <solid android:color="@color/white" />
        <corners android:radius="0dp" />
    </shape>
    </item>
    <item android:top="0dp"
          android:left="0dp"
          android:right="0dp"
          android:bottom="1dp">
        <shape android:shape="rectangle">
            <solid android:color="#262626" />
            <corners android:radius="0dp" />
        </shape>
    </item>
    </layer-list>
    

答案 2 :(得分:1)

为了没有双选择器(并且在适当的位置,例如在顶部,在底部),你有两个需要处理的情况,顶部元素(需要顶部和底部的选择器)加上每隔一行只需要选择器位于底部(顶部将由前一个元素的选择器覆盖)。这必须在代码中,在你的适配器中完成(如果你使用的是一个简单的表,你可以为顶部元素创建一个drawable,为其他元素创建一个drawable):

  • android:top中移除android:bottomlayer-list等属性(因为您将在代码中设置这些属性)
  • 适配器的getView()方法中的
  • 检索行视图的背景(将是LayerDrawable
  • 根据您所拥有的位置(主要是0对任何其他位置)使用LayerDrawable.setLayerInset()方法并为索引为1的图层设置插入(如果这是您的完全可绘制):top 和< / strong>第一个元素的底部,顶部(值为0)和每个其他位置的底部