Reputation: 1070
how do I get rid of this strange padding in the layout below:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:card_view="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:background="@color/ColorPrimaryDark">
<android.support.v7.widget.CardView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
card_view:cardCornerRadius="10dp"
android:layout_marginTop="9dp"
android:layout_marginLeft="9dp"
android:layout_marginRight="9dp"
card_view:cardElevation="0.01dp"
android:layout_marginBottom="0dp"
card_view:cardPreventCornerOverlap="true"
card_view:cardUseCompatPadding="true"
card_view:cardBackgroundColor="@color/ColorPrimary">
<RelativeLayout
android:id="@+id/top_layout"
android:layout_width="fill_parent"
android:layout_height="180dp"
android:background="@color/ColorPrimary">
<ImageView
android:id="@+id/img_thumbnail"
android:layout_width="fill_parent"
android:layout_height="180dp"
android:scaleType="fitXY"
android:background="@drawable/korabltest"/>
<RelativeLayout
android:id="@+id/inner_layout"
android:layout_width="fill_parent"
android:layout_height="36dp"
android:background="#5c1b1b1b"
android:layout_gravity="bottom"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true">
<TextView
android:id="@+id/tv_nature"
android:layout_width="wrap_content"
android:layout_height="50dp"
android:paddingLeft="5dp"
android:paddingRight="5dp"
android:layout_gravity="bottom"
android:gravity="center_vertical"
android:alpha="0.8"
android:textColor="#fff"
android:textSize="18sp"
android:text="Lexington"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true" />
<TextView
android:id="@+id/tv_nature_1"
android:layout_width="wrap_content"
android:layout_height="50dp"
android:paddingLeft="5dp"
android:paddingRight="5dp"
android:layout_gravity="bottom"
android:gravity="center_vertical"
android:alpha="0.8"
android:textColor="#fff"
android:textSize="18sp"
android:textStyle="bold"
android:text="527 (31%)"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true" />
</RelativeLayout>
</RelativeLayout>
</android.support.v7.widget.CardView>
</LinearLayout>
Upvotes: 51
Views: 37188
Reputation: 419
I previously specifically defined the height of the cardview - after changing it to "wrap_content", the issue was resolved.
Upvotes: 0
Reputation: 3419
use this:
cardView.setPadding(0,0,0,0);
cardView.setUseCompatPadding(true);
cardView.setContentPadding(-6,-6,-6,-6);
cardView.setPreventCornerOverlap(false);
Upvotes: 2
Reputation: 2825
Please remove this from your code -
card_view:cardUseCompatPadding="true"
Upvotes: 8
Reputation: 25816
Got the same problem and this worked for me.
app:cardPreventCornerOverlap="false"
For device with API < 21, I had to make a custom ImageView class, override the onDraw to draw the round corners.
@Override
protected void onDraw(Canvas canvas) {
float radius = getContext().getResources().getDimension(R.dimen.card_corner_radius);
Path path = new Path();
RectF rect = new RectF(0, 0, this.getWidth(), this.getHeight());
path.addRoundRect(rect, radius, radius, Path.Direction.CW);
canvas.clipPath(path);
super.onDraw(canvas);
}
Upvotes: 6
Reputation: 3672
UDPATE
Well, seems there is a much easier way to do it, without guessing the padding and all:
card_view:cardPreventCornerOverlap="false"
or using java:
cardView.setPreventCornerOverlap(false)
You can read all about it here.
ORIGINAL ANSWER
It is an intentional padding to avoid content from bleeding off the rounded corner of the card in pre lollipop versions (since clipping is not available). If you want to get rid of it all together you may use a negative padding in pre-lollipop versions for the contentPadding
attribute of the CardView
such as:
card_view:contentPadding="-8dp"
or using java:
int padding = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 8, getResources().getDisplayMetrics());
cardView.setContentPadding(-padding,-padding,-padding,-padding);
I'm not particularly sure which value will work seamlessly, you'll need to experiment and see for yourself.
Upvotes: 83