2015-07-08 19 views
19

làm thế nào để thoát khỏi đệm lạ này trong cách bố trí bên dưới:Android CardView loại bỏ đệm

enter image description here

<?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> 
+0

đang nói về đệm giữa các thẻ? – 3xplore

Trả lời

39

UDPATE

Vâng, dường như có một cách dễ dàng hơn để làm điều đó, mà không đoán padding và tất cả:

card_view:cardPreventCornerOverlap="false" 

hoặc sử dụng java:

cardView.setPreventCornerOverlap(false) 

Bạn có thể đọc tất cả về nó here.

ORIGINAL ĐÁP

Nó là một đệm cố ý để tránh nội dung từ chảy máu ra khỏi góc tròn của thẻ trong các phiên bản trước kẹo (vì cắt không có sẵn). Nếu bạn muốn thoát khỏi nó tất cả cùng nhau, bạn có thể sử dụng một đệm tiêu cực trong các phiên bản trước kẹo mút cho contentPadding thuộc tính của CardView như:

card_view:contentPadding="-8dp" 

hoặc sử dụng java:

int padding = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 8, getResources().getDisplayMetrics()); 
cardView.setContentPadding(-padding,-padding,-padding,-padding); 

tôi 'không đặc biệt chắc chắn giá trị nào sẽ hoạt động liền mạch, bạn sẽ cần phải thử nghiệm và xem cho chính mình.

+0

cảm ơn câu trả lời, nhưng sau khi thay đổi card_view: cardPreventCornerOverlap thành false, các góc bo tròn bị lệch hoàn toàn và không phải chỉ là một hình vuông. –

+0

@IvanFazaniuk Vâng, tôi đã không thử thuộc tính 'cardPreventCornerOverlap'. Hãy thử nó với một cách rõ ràng thiết lập 'cardCornerRadius' là tốt. Có thể làm việc. Nếu không, 'contentPadding' âm sẽ thực hiện thủ thuật: các góc còn nguyên vẹn. Tôi đã tự mình thử nó. – fahmy

+0

Có cách nào để thực hiện điều này trong XML không? – tccpg288

3

Có cùng vấn đề và this đã hoạt động đối với tôi.

app:cardPreventCornerOverlap="false" 

Đối với thiết bị có API < 21, tôi phải tạo lớp ImageView tùy chỉnh, ghi đè lên onDraw để vẽ các góc tròn.

@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); 
} 
2

Hãy loại bỏ điều này từ mã của bạn -

card_view:cardUseCompatPadding="true" 
0

sử dụng này:

cardView.setPadding(0,0,0,0); 
cardView.setUseCompatPadding(true); 
cardView.setContentPadding(-6,-6,-6,-6); 
cardView.setPreventCornerOverlap(false); 
Các vấn đề liên quan