以下のレイアウトでこの奇妙なパディングを取り除くにはどうすればよいですか:
<?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>
[〜#〜] udpate [〜#〜]
まあ、パディングとすべてを推測することなく、それを行うはるかに簡単な方法があるようです:
card_view:cardPreventCornerOverlap="false"
またはJavaを使用:
cardView.setPreventCornerOverlap(false)
あなたはそれについてすべて読むことができます こちら 。
オリジナルの回答
Lollipopの以前のバージョンでは、コンテンツがカードの丸い角からはみ出さないようにするための意図的なパディングです(クリッピングは使用できないため)。まとめて削除したい場合は、次のようなcontentPadding
のCardView
属性に対して、Lollipop以前のバージョンでネガティブパディングを使用できます。
card_view:contentPadding="-8dp"
またはJavaを使用:
int padding = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 8, getResources().getDisplayMetrics());
cardView.setContentPadding(-padding,-padding,-padding,-padding);
どの値がシームレスに機能するかは特にわかりません。自分で実験して確認する必要があります。
コードからこれを削除してください-
card_view:cardUseCompatPadding="true"
同じ問題が発生し、 this が機能しました。
app:cardPreventCornerOverlap="false"
APIが21未満のデバイスの場合、カスタムImageViewクラスを作成し、onDrawをオーバーライドして丸い角を描画する必要がありました。
@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);
}
これを使って:
cardView.setPadding(0,0,0,0);
cardView.setUseCompatPadding(true);
cardView.setContentPadding(-6,-6,-6,-6);
cardView.setPreventCornerOverlap(false);