我认为使用 a 不可能做到这一点ShapeDrawable
,因为它需要您在可绘制对象本身上使用某种边距或填充。实际上有一个padding
属性,但不幸的是,它只对 的内容有影响View
,而不是可绘制对象本身。
话虽如此,一个简单的解决方案是创建一个 9-patch 并将其作为背景应用到TextView
. 仅用于演示目的:使 9-patch 看起来像这样:
编辑:
再想一想,实际上还有另一个选项依赖于使用 aLayerDrawable
来创建所需的效果。创建有点乏味,我怀疑它会比使用 9-patch 更有效,但至少你不必渲染图像,这意味着如果你需要改变颜色,更直接。
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/rounded" />
<item android:drawable="@android:color/white" android:left="30dp"
android:right="30dp" />
<item android:bottom="30dp" android:drawable="@android:color/white"
android:top="30dp" />
<item android:bottom="30dp" android:left="10dp" android:right="10dp"
android:drawable="@color/pink" android:top="30dp" />
<item android:bottom="10dp" android:left="30dp" android:right="30dp"
android:drawable="@color/pink" android:top="10dp" />
</layer-list>
一些细节:@drawable/rounded
是您自己发布的代码片段。以下两项只是带有偏移的白色矩形,用于创建白色边缘。现在,由于这些也会覆盖粉红色的表面,我们需要另外两个粉红色的矩形(同样具有特定的偏移量)来解决这个问题。结果是一个看起来与您在问题中显示的完全一样的背景。
请注意,您可能想看看是否可以对此进行一些优化。至少我建议不要硬编码偏移量(就像我为简单起见所做的那样),而是将它们存储在一个文件中,这样您就可以通过从和dimens.xml
引用它们来保持这些值集中和一致。ShapeDrawable
LayerDrawable
附录:android:drawable
在 ICS 之前(或者可能是 Honeycomb 之前)设备上,使用属性直接引用颜色似乎存在问题。但是,您可以通过设置另一个可绘制对象(无论是 9-patch 还是ShapeDrawable
)来表示这种颜色,从而轻松解决这个问题。例如,在上面的代码片段中,您可以替换android:drawable="@color/pink"
为android:drawable="@drawable/color_pink"
,其中color_pink
可以简单地是一个包含以下内容的 xml 文件:
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="#FCE6C9" />
</shape>
显然,您需要对LayerDrawable
. 在姜饼 2.3.7 上测试。