2015-04-01 15 views
28

Używam cardview jako katalogu głównego widoku niestandardowego, który piszę. Korzystam z biblioteki pomocy v7. Mój XML wygląda następująco:Cardview - biała ramka wokół karty

<?xml version="1.0" encoding="utf-8"?> 
<android.support.v7.widget.CardView 
     xmlns:android="http://schemas.android.com/apk/res/android" 
     xmlns:card_view="http://schemas.android.com/apk/res-auto" 
     android:layout_width="wrap_content" 
     android:layout_height="match_parent" 
     android:layout_marginRight="6dp" 
     card_view:cardElevation="0dp"> 

    <LinearLayout 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:orientation="vertical"> 

     <!-- some other views --> 
    </LinearLayout> 
</android.support.v7.widget.CardView> 

Mój problem polega na tym, że wokół widoku mojej karty widzę białe obramowanie. Wygląda na to, że wskazuje na wysokość, ponieważ jest grubsza po prawej stronie. Próbowałem dostosowania cardElevation i MaxCardElevation w moim XML tak: card_view:cardElevation="0dp"

i kodu w moim niestandardowego widoku, który rozciąga CardView i wykorzystuje ten układ:

setCardElevation(0); 
setMaxCardElevation(0); 

Ale białe obramowanie utrzymuje. Nie jestem pewien, jak się tego pozbyć. Jeśli ktokolwiek miałby jakiś wkład w to, dlaczego tak się dzieje, lub sugestie, w jaki sposób mogę usunąć białą ramkę, byłoby to docenione. Dzięki wielkie.

+1

można udostępnić Screen Grab łatwo zrozumieć – Fahim

+0

można jeszcze tę "białą obwódkę", jeśli usunąć 'android: layout_marginRight =" 6dp "'? – Rami

+0

@Rami - tak jest nadal tam – TheMethod

Odpowiedz

76

Wiem, że to trochę późno, ale dla każdego, mającego podobny problem:

miałem ten sam problem: Biały granica została pokazana na urządzeniach wstępnie lizak.

Rozwiązałem to ustawienie cardPreventCornerOverlap na false na swoim XML.

Jak to:

<android.support.v7.widget.CardView 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:card_view="http://schemas.android.com/apk/res-auto" 
    android:layout_width="wrap_content" 
    android:layout_height="match_parent" 
    android:layout_marginRight="6dp" 
    card_view:cardPreventCornerOverlap="false"> 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:orientation="vertical"> 

     <!-- some other views --> 
    </LinearLayout> 
</android.support.v7.widget.CardView> 

Nadzieja to pomaga!

+2

To była aplikacja: cardUseCompatPadding = "true", ponieważ rozwijam się z xmlns: app = "http://schemas.android.com/apk/res-auto". Bądź ostrożny! Konsument czasu! xd – ArturoNaredo

+2

Dzięki! To działa. Ale jest problem. Po dodaniu tego znacznika odrzuca promień narożnika. Jak mogę to rozwiązać? –

+0

@ CanUludağ, Nie sądzę, że byłoby to możliwe przy użyciu biblioteki wsparcia. Przed Lollipop zaokrąglone rogi były zbyt drogie, więc CardView uniemożliwia obcinanie granic poprzez dodanie dopełnienia. Usunięcie go za pomocą 'cardPreventCornerOverlap' również usunie zaokrąglone rogi. Uważam, że aby go rozwiązać, trzeba użyć niestandardowego obrazu tła. –

3

Wsparcie CardView nie obsługuje obcinania treści, ponieważ jest kosztowne na starszych urządzeniach. Można klipować zawartość przy użyciu trybów Canvas.saveLayer/restoreLayer i PorterDuff. W ten sposób Carbon implementuje zaokrąglone narożniki z poprawnym obcinaniem treści. Zobacz obraz:

enter image description here

-4

użycie cardBackgroundColor = "color" w kodzie XML card_view próbki:

<android.support.v7.widget.CardView 
     android:id="@+id/card_view_khaterat" 
     android:layout_width="250dp" 
     android:layout_height="100dp" 
     android:layout_gravity="center_horizontal" 
     app:cardBackgroundColor="#f56f6c"/> 
+0

To w ogóle nie rozwiązuje problemu. –

2

mogę być późno w grze, ale miałem ten sam problem. Chciałem tylko udostępnić proste rozwiązanie!

Mój widok niestandardowy rozszerzony o CardView i miałem margines zastosowany do elementu głównego (tj. CardView) w pliku XML, tak jak w pytaniu oryginalnym.To skończyło się dając mi dodatkową białą obwódkę tak:

Before

Rozwiązanie było przesunąć margines z korzenia Widok niestandardowy XML z deklaracją widoku niestandardowego (sprawdź komentarze w urywek)

Fragment kodu:

<android.support.v7.widget.CardView 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:id="@+id/cvSettings" 
    style="@style/DefaultCardViewStyle" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_margin="@dimen/default_margin" <!-- Remove this --> 
    app:cardElevation="@dimen/default_card_elevation"> 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:orientation="vertical"> 
     . 
     . 
     . 
</android.support.v7.widget.CardView> 

Skończyło się tylko na marginesie ruchu do mojego oświadczenia niestandardowy widok, który pozbył się dodatkową białą obwódką:

<com.example.android.custom.MyCustomView 
     android:id="@+id/custom_view" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_margin="@dimen/default_margin" <!-- Move it here--> 
     cv:pt_widgetColor="@color/colorAccent" /> 

Po zmianie znacznie czystsze :):

enter image description here