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

를 사용하려고하는데 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에서 실행되는 경우 추가해야합니까?



답변

이 설정 CardView:

app:cardUseCompatPadding="true"

문서에서 :

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


답변

카드보기 내에서 아래 두 태그를 사용하세요.

app:cardPreventCornerOverlap="false"
app:cardUseCompatPadding="true"


답변

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

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


답변

에 추가 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 +에 패딩을 추가하여 이전 버전과 동일한 측정 값을 갖습니다.


답변