2015-07-08 20 views
19

jak mogę pozbyć się tego dziwnego wyściółką poniższy układ:Android CardView usunąć wyściółka

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

mówisz padding między kartami? – 3xplore

Odpowiedz

39

UDPATE

Cóż, wydaje się, że jest o wiele łatwiejszy sposób zrób to, bez zgadywania wyściółki i wszystkich:

card_view:cardPreventCornerOverlap="false" 

lub za pomocą Java:

cardView.setPreventCornerOverlap(false) 

Można przeczytać o tym here.

ORIGINAL ODPOWIEDŹ

Jest to celowe, aby uniknąć wyściółka treści z upust zaokrąglony narożnik karty w wersji pre lizak (od obcinanie nie jest dostępny). Jeśli chcesz pozbyć się tego wszystkiego razem można użyć negatywny wyściółkę w wersji pre-lizak dla atrybutu contentPaddingCardView takich jak:

card_view:contentPadding="-8dp" 

lub za pomocą Java:

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

I nie jestem szczególnie pewien, która wartość będzie działać płynnie, musisz eksperymentować i przekonać się samemu.

+0

dziękuję za odpowiedź, ale po zmianie card_view: cardPreventCornerOverlap na false, zaokrąglone rogi zniknęły w ogóle, a nie jest to tylko kwadrat. –

+0

@IvanFazaniuk Tak, nie próbowałem atrybutu 'cardPreventCornerOverlap'. Spróbuj z jawnym ustawieniem 'cardCornerRadius'. Może działać. Jeśli tak nie jest, negatywne 'contentPadding' zrobi lewy: narożniki są nienaruszone. Sam to wypróbowałem. – fahmy

+0

Czy można to zrobić w XML? – tccpg288

3

Mam ten sam problem i this pracował dla mnie.

app:cardPreventCornerOverlap="false" 

dla urządzenia z API < 21, musiałem zrobić niestandardową klasę ImageView, nadpisać OnDraw wyciągnąć zakręty.

@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

Proszę usunąć to z kodu -

card_view:cardUseCompatPadding="true" 
0

użyj:

cardView.setPadding(0,0,0,0); 
cardView.setUseCompatPadding(true); 
cardView.setContentPadding(-6,-6,-6,-6); 
cardView.setPreventCornerOverlap(false); 
Powiązane problemy