2015-10-01 6 views
6

Próbuję dodać zaokrąglenia i cienie do niektórych widoków aplikacji i korzystam z biblioteki widoku kart, aby to osiągnąć. Wygląda dobrze na urządzeniach Lollipop, ale mam problemy ze zgodnością z czymkolwiek przed Lollipopem.Biała przestrzeń z CardView na urządzeniach pre-lollipop

Przedmówię to, mówiąc, że przyjrzałem się odpowiedziom w poniższych pytaniach, stwierdziłem, że żadna z nich nie działa dla mnie.

Najpopularniejszą odpowiedzią było dodać atrybut 'cardPreventOverlap = false', ale ten usuwa zaokrąglone narożniki. Próbowałem wariacje tej flagi i "cardUseCompatPadding =" true ", ale żadna z nich nie wydaje się zdziałać. Czy ktoś inny ma podobny problem?

Mój kod:

<android.support.v7.widget.CardView 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_marginBottom="8dp" 
    card_view:cardCornerRadius="4dp"> 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:background="@drawable/selector" 
     android:gravity="center" 
     android:orientation="horizontal" > 

     <ImageView 
      android:layout_width="44dp" 
      android:layout_height="match_parent" 
      android:layout_marginRight="4dp" 
      android:background="@color/mid_yellow" 
      android:padding="0dp" 
      android:src="@drawable/ic_add_white_24dp" /> 

     <TextView 
      style="@style/Text.Primary.White" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_margin="4dp" 
      android:text="Button" /> 
    </LinearLayout> 

Jak to wygląda obecnie na Android 5.0:

enter image description here

Dokładna sam kod na 4.4.2 wyświetlaczy jak:

enter image description here

Z 'cardPreventOverlap = false':

enter image description here

Aktualizacja Niestety nie byliśmy w stanie rozwiązać ten problem; biorąc pod uwagę, że aplikacja miała tylko małą bazę instalacyjną pre5.0, zdecydowaliśmy, że nie jest to ważne. W końcu wybraliśmy trzecią opcję "cardPreventOverlap = false".

Odpowiedz

0

Zamiast card_view:cardCornerRadius można ustawić background z cardview z drawable jak:

<?xml version="1.0" encoding="UTF-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android"> 
    <solid android:color="#FFFFFF"/> 
    <corners android:radius="4dip"/> 
</shape> 

Można również zrobić to dla każdego elementu w swoim cardview takie, że trzeba dla każdego elementu prawidłowy kolor tła . W takim przypadku można określić tylko niektóre z narożników:

<corners 
    android:topLeftRadius="4dp" 
    android:bottomLeftRadius="4dp"/> 

Dla + przycisku na przykład.

Funkcja ta w połączeniu z cardUseCompatPadding="true"

+0

Obawiam się, że nie ma to wyglądać inaczej. Jeśli każdy element byłby kształtem, to tak, zmieniając narożnik każdego kształtu ORAZ używając cardPreventCornerOverlap = "false", działałby, ale są też obrazy i inne widoki w niektórych miejscach, w których potrzebuję, w których nie mogę zmienić narożników. – RobVoisey

+0

Ale możesz po prostu umieścić go na swoim "linelayout" nie? Używając przezroczystego koloru tła i negatywów, powinno również działać. –

+0

Nie zmienia się to tak, że tło układu liniowego nie ma wpływu na jego elementy podrzędne. Kwadratowe dzieci nadal znajdowałyby się w lewym górnym rogu zakrywającym tło Linearlayouts; Chciałbym, aby dzieci również zaokrąglone, wszystkie dzieci są odpowiednio zaokrąglone na lizaku. – RobVoisey

3

Content przycinania nie jest obsługiwany, ponieważ jest dość drogie na starszych urządzeniach. Jeśli chcesz, możesz użyć Carbon. Ma własną implementację CardView, która poprawnie klipuje zawartość do zaokrąglonych rogów. Carbon dodaje również obcinanie i elewację zawartości do wszystkich innych układów, więc do Twojego celu możesz użyć LinearLayout z zaokrąglonymi narożnikami i cieniem.Zobacz obraz:

enter image description here