Adding a Color Background and Border Radius to a Layout
I Want to Create a Layout with Rounded Corners and a Filled Color Background. This Is My Layout: .. . I Have the Following Drawable Xml (Offeritemlayout) That...
I want to create a layout with rounded corners and a filled color background.
This is my layout:
<LinearLayout
android:layout_width="match_parent"
android:layout_height="210dp"
android:orientation="vertical"
android:layout_marginBottom="10dp"
android:background="@drawable/offerItemLayout">
<LinearLayout
android:id="@+id/offerImageHolder"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
.
.
.
</LinearLayout>
</LinearLayout>
I have the following drawable xml (offerItemLayout) that creates the borders correctly:
<layer-list xmlns:android="">
<item>
<shape xmlns:android=""
android:shape="rectangle">
<corners
android:radius="5dp"/>
<stroke
android:width="1dp"
android:color="@color/bggrey" />
</shape>
</item>
// The lines below causes an inflation failure.
<item>
<fill
android:color="@color/white"/>
</item>
</layer-list>
But inserting the item with a fill causes the inflation of the layout to fail.
Additionally, if I assign a color background to my inner LinearLayout (offerImageHolder), it overrides the first background with my rounded corners.
Any thoughts on doing this properly? :/
3 Answers
You don't need the separate fill item. In fact, it's invalid. You just have to add a solid block to the shape. The subsequent stroke draws on top of the solid:
<shape
xmlns:android=""
android:shape="rectangle">
<corners android:radius="5dp" />
<solid android:color="@android:color/white" />
<stroke
android:width="1dip"
android:color="@color/bggrey" />
</shape>
You also don't need the layer-list if you only have one shape.
background.xml in drawable folder.
<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="">
<solid android:color="#FFFFFF"/>
<stroke
android:width="3dp"
android:color="#0FECFF" />
//specify gradient
<gradient
android:startColor="#ffffffff"
android:endColor="#110000FF"
android:angle="90"/>
<padding
android:left="5dp"
android:top="5dp"
android:right="5dp"
android:bottom="5dp"/>
<corners
android:bottomRightRadius="7dp"
android:bottomLeftRadius="7dp"
android:topLeftRadius="7dp"
android:topRightRadius="7dp"/>
</shape>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="210dp"
android:orientation="vertical"
android:layout_marginBottom="10dp"
android:background="@drawable/background">
You can use a binding adapter like this :
@BindingAdapter("borderRadius")
fun setBorderRadiusAdapter(view: View, radius: Float) {
val shape = GradientDrawable()
shape.cornerRadius = radius
shape.color = view.backgroundTintList ?: ColorStateList.valueOf(getColor(view.context, R.color.primary))
view.background = shape
}
And on yout view component :
android:backgroundTint="@android:color/white"
app:borderRadius="@{8f}"
Warning : wrap your template with <layout></layout> for compile @{8f} border radius value