Lollipop에서 CardView 사이에 공간이없는 이유는 무엇입니까?


79

를 사용하려고하는데 CardView5.0 이하에서 잘 작동하지만 Lollipop에서는 이상하게 보입니다.

여기에 이미지 설명 입력

여기에 이미지 설명 입력

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin">

<android.support.v7.widget.CardView android:layout_width="match_parent"
    android:layout_height="200dp">
    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="card1"
        android:textAppearance="?android:attr/textAppearanceLarge" />
</android.support.v7.widget.CardView>
<android.support.v7.widget.CardView android:layout_width="match_parent"
    android:layout_height="200dp">

    <TextView
        android:id="@+id/textView2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="card2"
        android:textAppearance="?android:attr/textAppearanceLarge" />
</android.support.v7.widget.CardView>
</LinearLayout>

을 사용할 때 동일한 질문이 나타납니다 RecyclerView. Lollipop에서 실행되는 경우 추가해야합니까?


1
추가 LinearLayout카드 사이
안드레스 카르데나스에게

답변:


205

이 설정 CardView:

app:cardUseCompatPadding="true"

문서에서 :

API v21 +에 패딩을 추가하여 이전 버전과 동일한 측정 값을 갖습니다.


1
대신 "app"네임 스페이스를 사용했습니다. "card_view"가 여전히 사용됩니까?
wsgeorge

1
@wsgeorge는 Android 설명서에 있지만 더 친숙한 앱 네임 스페이스로 편집했습니다.
tomrozb

더 좋아 보이지만 어떻게 구분선을 제거합니까?
뉴스 없음

@nonews 시도해 볼 수 있습니다 android:divider="@null".
SREE


13

첫 번째 이미지는 카드보기의 예상되는 동작입니다. 카드에 고도가있을 때 그림자는 하단 레이어에 떨어집니다. 사전 롤리팝 장치에서는 패딩을 추가하여 높이를 만듭니다. 따라서 사전 롤리팝 기기는 카드보기 주변에 패딩이 있습니다.

L 전에 CardView는 내용에 패딩을 추가하고 해당 영역에 그림자를 그립니다. 이 패딩 양은 maxCardElevation + (1-cos45) * cornerRadius (측면) 및 maxCardElevation * 1.5 + (1-cos45) * cornerRadius (상단 및 하단)와 같습니다.


그래서 편집기에서 볼 수있는 cardview의 크기는 lollipop 아래에서 사용할 수있는 실제 크기가 아닙니다. 패딩을 추가하는 데 사용되는 부분이 있고, lollipop에서는 레이아웃의 크기가 실제와 동일합니다. 패딩을 주면 더 좋아 보이지만 어떻게 분리해야합니까?
cajsaiko 2014

에디터에서 본 것은 실제로 얻은 것입니다. 모든 화면에서 카드 사이에 동일한 여백을 유지하려면 API 레버가 21 이상인 경우 여백 설정
null 포인터

5
정답입니다. 또한 값 -21에 대해 별도의 여백을 추가하지 않고 UI를 일관되게 만들고 싶다면 compat padding을 true로 설정하여 L에도 동일한 패딩을 추가 할 수 있습니다. developer.android.com/reference/android/support/v7/widget/…
yigit

여백을 추가 한 후 @billgates 카드보기는 lollpop과 pre-lollpop 모두에서 좋아 보입니다. 답변 해 주셔서 감사합니다!
cajsaiko 2014

1
롤리팝 이전 기기에서 패딩을 제거 할 수 있습니까?
user2456977 2015-04-27

5

에 추가 app:cardUseCompatPadding="true"해야합니다 Cardview. 그러나 그것을 추가하는 것만으로도 오류가 발생할 수 있습니다. 이 오류를 방지하려면, 당신은 또한 추가 할 필요가 xmlns:app="http://schemas.android.com/apk/res-auto"당신에 CardView.

예를 들면

<android.support.v7.widget.CardView
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_height="wrap_content"
    android:layout_width="match_parent"
    app:cardUseCompatPadding="true">

    // Other views here

</android.support.v7.widget.CardView>

일부는 추가 할 수 card_view:cardUseCompatPadding="true"xmlns:card_view="http://schemas.android.com/apk/res-auto"대신에 위에서 언급 한 사람들의. 두 가지 방법 모두 정확합니다.

XML (Android)로 된 에 대해 더 알고 싶다면 다음 답변을 참조하십시오 .

이전 답변으로 문제가 해결되지만 각 속성의 기능을 설명하지 않았습니다. 따라서 구직자에게 더 도움이되도록

cardPreventCornerOverlap 속성은 카드 콘텐츠와 둥근 모서리 사이의 교차를 방지하기 위해 v20 및 이전 버전의 CardView에 패딩을 추가합니다.

cardUseCompatPadding 속성은 API v21 +에 패딩을 추가하여 이전 버전과 동일한 측정 값을 갖습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.