2015-07-08 14 views
19

wie kann ich dieses seltsame padding unten im Layout loszuwerden:Android CardView entfernen padding

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

sprechen Sie über die Polsterung zwischen den Karten? – 3xplore

Antwort

39

UDPATE

Nun, scheint es eine viel einfachere Art und Weise zu tun Sie es, ohne die Auffüllung und alles zu erraten:

card_view:cardPreventCornerOverlap="false" 

oder mit Java:

cardView.setPreventCornerOverlap(false) 

Sie alles über here lesen kann.

ORIGINAL ANTWORT

Es ist eine absichtliche Polsterung Inhalt zu vermeiden, Blutungen aus der abgerundeten Ecke der Karte in pre Lutschern Versionen (seit Clipping nicht verfügbar ist). Wenn Sie alle zusammen los, es bekommen wollen, können Sie eine negative Polsterung in Pre-Lutscher-Versionen für das contentPadding Attribut der Verwendung CardView wie:

card_view:contentPadding="-8dp" 

oder mit Java:

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

I Ich bin mir nicht besonders sicher, welcher Wert nahtlos funktioniert, Sie müssen experimentieren und selbst sehen.

+0

danke für die Antwort, aber nach dem Ändern von card_view: cardPreventCornerOverlap zu false, abgerundete Ecken überhaupt verschwunden und es ist nicht nur ein Quadrat. –

+0

@IvanFazaniuk Ja, ich habe das 'cardPreventCornerOverlap' Attribut nicht versucht. Probieren Sie es aus, indem Sie explizit auch den 'cardCornerRadius' festlegen. Könnte funktionieren. Wenn dies nicht der Fall ist, wird das negative contentPadding den Trick machen: Ecken sind intakt. Ich habe es selbst versucht. – fahmy

+0

Gibt es eine Möglichkeit, dies in XML zu tun? – tccpg288

3

Bekam das gleiche Problem und this arbeitete für mich.

app:cardPreventCornerOverlap="false" 

für Einheiten mit API < 21 hatte ich eine benutzerdefinierte Image Klasse zu machen, überschreiben die OnDraw die runden Ecken zu zeichnen.

@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

Bitte entfernen Sie diese aus dem Code -

card_view:cardUseCompatPadding="true" 
0

Verwendung dieses:

cardView.setPadding(0,0,0,0); 
cardView.setUseCompatPadding(true); 
cardView.setContentPadding(-6,-6,-6,-6); 
cardView.setPreventCornerOverlap(false);