3

我正在使用一个列表视图,其中我有一个引用可绘制/列表的 xml,如下所示:

<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 的间隙。请参考下图:

在此处输入图像描述

正如您从图像中看到的那样,BOK.L 下面的矩形底部边框有点偏离,显示了 GOOG.OQ 顶部矩形边框之间的间隙有没有办法解决这个问题,使得两个边框都重叠在每个边框的顶部其他并且没有出现这样的双线间隙,或者有没有办法可以定义线条形状,使其在图片中所有单元格的上方和下方定义而没有间隙?

有什么线索吗?

谢谢!贾斯汀

引用相同(可绘制/列表)的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 与您一起修复我得到的屏幕是: 在此处输入图像描述

4

3 回答 3

0

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

你需要做的两件事

  • 对于每个项目,只让一个(顶部底部)发光。因此,您每项只能获得一行。项目的可绘制 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>
    
  • 对于整个列表,您需要显示缺少的一行的可绘制对象。用于此的可绘制 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>
    
于 2013-10-05T19:02:55.797 回答
0

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

  • 从 中删除 等android:top属性(因为您将在代码中设置这些属性)android:bottomlayer-list
  • getView()适配器的方法中检索行视图的背景(这将是 a LayerDrawable
  • 根据您拥有的位置(主要是 0 与任何其他位置)使用该LayerDrawable.setLayerInset()方法并设置索引为 1 的图层的插图(如果这是您的完整可绘制对象):第一个元素的顶部底部,顶部(值为0) 和每个其他位置的底部
于 2013-10-08T06:52:33.090 回答
0

您可以使用ListViewparamsandroid:dividerandroid:dividerHeight, 来设置所需颜色和高度的行分隔符。

于 2013-10-03T18:30:54.397 回答