我在视图周围添加了一个完整的边框,但我需要添加角落,如下图所示:
我的意思是红色角落。
我尝试调整以下边框xml,但它不起作用:
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<stroke android:width="10dp" android:height="10dp" android:color="#B22222" />
<solid android:color="#FCE6C9" />
<corners android:radius="20dp" />
</shape>
任何帮助将不胜感激
答案 0 :(得分:2)
我认为不可能使用ShapeDrawable
来执行此操作,因为它需要您在drawable本身上使用某种边距或填充。实际上有一个padding
属性,但不幸的是,这只会影响View
的内容,而不会影响drawable本身。
话虽如此,一个简单的解决方案是创建一个9补丁并将其作为背景应用于TextView
。仅用于演示目的:使9补丁看起来像这样:
修改强>
第二个想法,实际上还有另一个选项依赖于使用LayerDrawable
来创建所需的效果。创建它有点乏味,我怀疑它比使用9补丁更有效,但至少你不需要渲染图像,这意味着如果你需要制作例如颜色的变化,更直接。
<?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
。
附录:在ICS之前(或可能是pre-Honeycomb)设备上,直接引用android:drawable
属性的颜色似乎存在问题。但是,您可以通过设置另一个drawable(无论是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。
答案 1 :(得分:0)
我会创建一个9补丁文件并将其设置为主容器的背景。这样做的步骤是。
那应该是它。希望有所帮助。