Android 如何避免列表之间出现双边框?

Android 如何避免列表之间出现双边框?,android,android-layout,listview,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/w

我使用的是一个列表视图,其中有一个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的间隙。 请参考下图:

正如你从图像中看到的,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与您一起修复我得到的屏幕是:

您可以使用
ListView
params
android:divider
android:dividerHeight
设置所需颜色和高度的线分隔符。

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

你需要做两件事

  • 对于每个项目,只让一个(顶部或底部)发光。因此,每个项目只有一行。项目的可绘制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>
    
    
    

为了避免出现双选择器(在适当的位置,如顶部和底部),您需要处理两个案例,顶部元素(需要顶部和底部的选择器)加上仅在底部需要选择器的每一行(顶部将由上一个元素的选择器覆盖)。这必须在代码中,在适配器中完成(如果您使用的是一个简单的表,您可以只为顶部元素绘制一个,为其他元素绘制一个):

  • 层列表
    中删除诸如
    android:top
    android:bottom
    等属性(您将在代码中设置这些属性)
  • 在适配器的
    getView()
    方法中,检索行视图的背景(这将是一个
    LayerDrawable
  • 根据您拥有的位置(主要是0与其他任何位置相比),使用
    LayerDrawable.setLayerSet()
    方法,为索引为1的层设置插入(如果索引为完全可绘制):第一个元素的顶部和底部,顶部(值为0)和底部(每个其他位置)

我已经在我可以使用它的单元格中使用了这些,但这是一个不同的情况,我需要使用图层列表,有没有办法修改它以适应行?我知道,对不起,从未使用过
图层列表
。将安卓:top o安卓:bottom设置为0px怎么样?嗯,太糟糕了,我会亲自尝试一下,如果有其他发现,会告诉你。关于这个问题的任何线索:?没有解决,仍然存在缺少上下边框的问题:(我不知道我是否理解你的意思。你想显示一个带行(并且只有一行)的列表视图吗在每个项目之间。另外,您希望在整个列表的顶部和底部各有一行。是这样吗?您可以发布项目的Xml和listview的布局Xml吗?请检查编辑后的问题中的Xml以及我使用建议的修复方法得到的相应屏幕看起来更好。我们不再有双线,right?因此我们错过了最后一条底线。我编辑我的答案以反映我的建议。erm?我如何在给定的xml中连接它们??从
android:top
层列表中删除
和其他属性
然后获取行视图的背景,将其转换为一个可绘制的
层,然后使用
setlayerrinset()
方法显示适当的分隔符:列表中第一个元素的顶部和底部(位置==0),其他元素只显示底部。如果有转换视图,请记住重置插图。有没有更简单的方法?因为我没有专门的适配器,也不知道如何将其转换为相同的格式,请您以编程方式解释一下好吗?谢谢!nvm,我已使其正常工作,按照您建议的行进行操作。可以吗你复制粘贴这个东西作为答案,这样我就可以给你25+作为正确答案,给你50+作为赏金和提醒?你有什么线索吗?@JusticeBauer抱歉,但我不知道如何帮助你。