为Android ListView绘制两条分割线?

9

有没有可能为ListView分隔符绘制两个线条(一个接一个)?

我尝试了以下可绘制对象,但它只显示第一条线:

<?xml version="1.0" encoding="utf-8"?>

<shape
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:shape="line">
    <stroke
            android:color="#eeeeee"
            />
    <size
            android:height="1px"
            />

    <stroke
            android:color="#c1c1c1"
            />
    <size
            android:height="1px"
            />
</shape>
2个回答

23

是的,这是可能的。如果你想用形状可绘制对象创建它,你需要以不同的方式来做。在形状可绘制对象中只能包含一个形状,在您的情况下为一条线。您可以在图层列表可绘制对象中组合两个形状。图层列表中的可绘制对象会相互叠加,最后一个放在最上面。要创建两条线,您只需为每条线设置适当的填充,使两条线都可见。得到的可绘制对象将类似于以下内容(在示例中我将线变粗了):

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:bottom="2dp">
        <shape android:shape="line">
            <stroke
                    android:color="#eeeeee"
                    android:width="2dp"
                    />
            <size
                    android:height="4dp"
                    />
        </shape>
    </item>
    <item android:top="2dp">
        <shape android:shape="line">
            <stroke
                    android:color="#c1c1c1"
                    android:width="2dp"
                    />
            <size
                    android:height="4dp"
                    />
        </shape>
    </item>
</layer-list>

2
太好了!只是想再补充一点,因为我花了额外的15分钟才明白为什么这不起作用:移除dividerHeight或将其设置为正确的值,否则线条将不可见。 - luben
一直在寻找这个答案。高度属性与项目的顶部和底部尺寸结合起来确实令人困惑! - loeschg

1
如果您想让这2个笔画非常细,比如每个只有1像素高,我尝试了上面的解决方案,但无法实现。
我发现更容易的方法是用所需颜色绘制一个小图像(1x2),然后在分隔符中定义该图像:
android:divider="@drawable/myTinyDivider"

希望这能帮助到某个人。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接