如何在Android中为渐变<shape>添加填充?</shape>

时间:2009-10-25 22:51:53

标签: android

我有一个带有渐变的形状,我将其用作ListView项之间的分隔符。我把它定义如下:

<?xml version="1.0" encoding="UTF-8"?>
<shape
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">

<gradient
    android:startColor="#ccd0d3"
    android:centerColor="#b6babd"
    android:endColor="#ccd0d3"
    android:height="1px"
    android:angle="0" />

</shape>

我想在渐变的两边添加6个像素的填充,这样它就不会从屏幕的边缘延伸到另一边。

但是,无论我在哪里放置android:left="6px"android:right="6px",它似乎都没有生效。我可以将其放在<shape>元素,<gradient>元素或<padding>的{​​{1}}子元素中,并且不会改变任何内容。

如何在列表分隔符的左侧和右侧添加填充?

3 个答案:

答案 0 :(得分:134)

我想你可以像这样结合它:

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

    <item android:left="6dp"
          android:right="6dp">

        <shape android:shape="rectangle">
            <gradient android:startColor="#ccd0d3"
                      android:centerColor="#b6babd"
                      android:endColor="#ccd0d3"
                      android:height="1px"
                      android:angle="0"/>
        </shape>
    </item>
</layer-list>

答案 1 :(得分:46)

另一种使用插图的解决方案:

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

    <shape   
        android:shape="rectangle">

    <gradient
        android:startColor="#ccd0d3"
        android:centerColor="#b6babd"
        android:endColor="#ccd0d3"
        android:height="1px"
        android:angle="0" />

    </shape>

</inset>

答案 2 :(得分:22)

一个解决方案似乎是用另一个指定适当填充的drawable“包装”我的drawable。

例如,list_divider.xml将是:

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

    <item
        android:left="6dp"
        android:right="6dp"
        android:drawable="@drawable/list_divider_inner" />

</layer-list>

然后list_divider_inner.xml将是原始的drawable:

<?xml version="1.0" encoding="UTF-8"?>
<shape
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">

<gradient
    android:startColor="#ccd0d3"
    android:centerColor="#b6babd"
    android:endColor="#ccd0d3"
    android:height="1px"
    android:angle="0" />

</shape>

这导致两个文件指定一个简单的分隔符。我不知道是否有办法只使用一个文件。