我有这个drawable有一个圆角矩形作为背景:
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="@color/white" />
<stroke android:width="1dp" android:color="@color/light_gray" />
<padding android:left="10dp" android:top="10dp" android:right="10dp" android:bottom="10dp" />
<corners android:radius="6dp" />
</shape>
这正如预期的那样正常。
现在,我想将此更改为仅围绕顶角,因此我将其更改为:
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="@color/white" />
<stroke android:width="1dp" android:color="@color/light_gray" />
<padding android:left="10dp" android:top="10dp" android:right="10dp" android:bottom="10dp" />
<corners android:topLeftRadius="6dp" android:topRightRadius="6dp"
android:bottomLeftRadius="0dp" android:bottomRightRadius="0dp"/>
</shape>
但是现在没有任何一个角是圆角的,我得到一个普通的矩形。我在这里缺少什么?
答案 0 :(得分:252)
尝试给出这些值:
<corners android:topLeftRadius="6dp" android:topRightRadius="6dp"
android:bottomLeftRadius="0.1dp" android:bottomRightRadius="0.1dp"/>
请注意,我已将0dp
更改为0.1dp
。
编辑:请参阅下面的 Aleks G comment了解更清洁的版本
答案 1 :(得分:13)
尝试做这样的事情:
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:bottom="-20dp" android:left="-20dp">
<shape android:shape="rectangle">
<solid android:color="@color/white" />
<corners android:radius="20dp" />
</shape>
</item>
</layer-list>
似乎不适合设置矩形的不同角半径。所以你可以使用这个黑客。
答案 2 :(得分:8)
在busylee's answer的基础上,您可以制作drawable
只有一个 un 圆角的示例(在此示例中左上角):
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape android:shape="rectangle">
<solid android:color="@color/white" />
<!-- A numeric value is specified in "radius" for demonstrative purposes only,
it should be @dimen/val_name -->
<corners android:radius="10dp" />
</shape>
</item>
<!-- To keep the TOP-LEFT corner UNROUNDED set both OPPOSITE offsets (bottom+right): -->
<item
android:bottom="10dp"
android:right="10dp">
<shape android:shape="rectangle">
<solid android:color="@color/white" />
</shape>
</item>
</layer-list>
请注意,Android Studio预览版(2.0.0p7)中正确显示上述drawable
。无论如何要预览它,创建另一个视图并将其用作android:background="@drawable/..."
。
答案 3 :(得分:7)
在我的情况下,代码
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:top="10dp" android:bottom="-10dp"
>
<shape android:shape="rectangle">
<solid android:color="@color/maincolor" />
<corners
android:topLeftRadius="10dp"
android:topRightRadius="10dp"
android:bottomLeftRadius="0dp"
android:bottomRightRadius="0dp"
/>
</shape>
</item>
</layer-list>
答案 4 :(得分:2)
我尝试了你的代码,得到了一个圆角的按钮。我给出了@ffffff
的颜色和我给#C0C0C0
的笔画。
尝试
答案 5 :(得分:1)
您可能需要阅读此https://developer.android.com/guide/topics/resources/drawable-resource.html#Shape
及以下有注释。
注意每个角必须(最初)提供大于1的角半径,否则没有角是圆角的。如果你想要特定的角不被舍入,一个解决方法是使用android:radius来设置一个大于1的默认角半径,但是然后用你真正想要的值覆盖每个角,提供零(&#34) ; 0dp&#34;)你不想要圆角。
答案 6 :(得分:1)
在drawable上创建roung_top_corners.xml并复制以下代码
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" >
<corners
android:topLeftRadius="22dp"
android:topRightRadius="22dp"
android:bottomLeftRadius="0dp"
android:bottomRightRadius="0dp"
/>
<gradient
android:angle="180"
android:startColor="#1d2b32"
android:centerColor="#465059"
android:endColor="#687079"
android:type="linear" />
<padding
android:left="0dp"
android:top="0dp"
android:right="0dp"
android:bottom="0dp"
/>
<size
android:width="270dp"
android:height="60dp"
/></shape>
答案 7 :(得分:1)
尝试使用 MaterialShapeDrawable
并在 kotlin/java 代码中对其进行配置。
val backgroundShapeModel = ShapeAppearanceModel.builder()
.setTopLeftCorner(CornerFamily.ROUNDED, 16F.toPx)
.setTopRightCorner(CornerFamily.ROUNDED, 16F.toPx)
.build()
textView.background = MaterialShapeDrawable(backgroundShapeModel).apply {
fillColor = ColorStateList.valueOf(Color.GREEN)
}
除了 xml
drawables 提供的功能(fillColor、stroke...),MaterialShapeDrawable
还支持:
cornerFamily
分为两类:rounded
和 cut
edgeTreatment
与 TriangleEdgeTreatment
、OffsetEdgeTreatment
、...]
val backgroundShapeModel = ShapeAppearanceModel.builder()
.setTopLeftCorner(CornerFamily.ROUNDED, 16F.toPx)
.setTopRightCorner(CornerFamily.CUT, 16F.toPx)
.setAllEdges(TriangleEdgeTreatment(5f.toPx, true))
.build()
textView.background = MaterialShapeDrawable(backgroundShapeModel).apply {
fillColor = ColorStateList.valueOf(Color.GREEN)
setStroke(2f.toPx,Color.RED)
}
答案 8 :(得分:1)
bg.xml
<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#FFFFFF"/>
<corners android:topLeftRadius="24dp" android:topRightRadius="24dp"
android:bottomLeftRadius="0dp" android:bottomRightRadius="0dp"/>
</shape>
在您的布局中添加:
android:background="@drawable/bg"
答案 9 :(得分:0)
尝试完全删除这些属性。
android:bottomLeftRadius="0dp" android:bottomRightRadius="0dp"