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

我有一个渐变的形状,我用作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>元素或者<shape>一个单独的<padding>子元素中,并且不会改变任何东西。

我怎样才能在我的列表分隔符的左侧和右侧添加填充?

我想你可以像这样结合起来:

 <?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> 

另一种使用插入的解决scheme

 <?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> 

一个解决scheme似乎是用另一个指定适当的填充的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> 

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