Android
CardView
수색…
소개
모서리가 둥근 모서리와 그림자가있는 FrameLayout입니다.
CardView는 Lollipop에서 그림자에 대해 입면 특성을 사용하고 구형 플랫폼에서 사용자 정의 에뮬레이션 된 그림자 구현으로 돌아갑니다.
Lollipop 이전의 플랫폼에서는 둥근 모서리 자르기의 값 비싼 특성으로 인해 CardView는 둥근 모서리와 교차하는 자식을 잘라 내지 않습니다. 그 대신에, 그러한 교차를 피하기 위해서 패딩을 추가합니다 (이 동작을 변경하려면 setPreventCornerOverlap (boolean)를 참조).
매개 변수
매개 변수 | 세부 |
---|---|
cardBackgroundColor | CardView의 배경색입니다. |
cardCornerRadius | CardView의 코너 반경입니다. |
cardElevation | CardView에 대한 표고. |
cardMaxElevation | CardView의 최대 입면도. |
cardPreventCornerOverlap | v20 및 그 이전의 CardView에 패딩을 추가하여 카드 내용과 둥근 모서리 간의 교차를 방지하십시오. |
cardUseCompatPadding | API v21 +에서 패딩을 추가하면 이전 버전과 동일한 측정 값을 얻을 수 있습니다. "true"또는 "false"와 같은 부울 값일 수 있습니다. |
contentPadding | 카드 모서리와 CardView의 하위 사이에있는 안쪽 여백 |
contentPaddingBottom | 카드의 아래쪽 가장자리와 CardView의 하위 사이에있는 안쪽 여백 |
contentPaddingLeft | 카드의 왼쪽 가장자리와 CardView의 하위 사이에있는 안쪽 여백 |
contentPaddingRight | CardView에 대한 표고. |
cardElevation | 카드의 오른쪽 가장자리와 CardView의 하위 사이에있는 안쪽 여백 |
contentPaddingTop | 카드 상단 가장자리와 CardView의 내부 사이에있는 안쪽 여백 |
비고
CardView
는 Lollipop (API 21) 이상에서 실제 고도와 동적 그림자를 사용합니다. 그러나 Lollipop CardView
가 프로그래밍 방식의 그림자 구현으로 돌아 가기 전에
CardView
의 둥근 모서리에 ImageView
CardView
, 미리 Lollipop (API 21)이 올바르지 않게 보일 수 있습니다. 이 문제를 해결하려면 호출해야합니다 setPreventCornerOverlap(false)
당신에 CardView
, 또는 추가 app:cardPreventCornerOverlap="false"
레이아웃에.
CardView
를 사용하기 전에 build.gradle
파일에 지원 라이브러리 종속성을 추가 build.gradle
합니다.
dependencies{
compile 'com.android.support:cardview-v7:25.2.0'
}
공식 문서 :
https://developer.android.com/reference/android/support/v7/widget/CardView.html https://developer.android.com/training/material/lists-cards.html
CardView 시작하기
CardView
는 Android Support Library의 회원이며 카드 레이아웃을 제공합니다.
프로젝트에 CardView
를 추가하려면 build.gradle
종속성에 다음 행을 추가하십시오.
compile 'com.android.support:cardview-v7:25.1.1'
레이아웃에서 다음을 추가하여 카드를 얻을 수 있습니다.
<android.support.v7.widget.CardView
xmlns:card_view="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<!-- one child layout containing other layouts or views -->
</android.support.v7.widget.CardView>
그 안에 다른 레이아웃을 추가하면 카드에 포함됩니다.
또한 CardView는 모든 UI 요소로 채워지고 코드 에서 조작 될 수 있습니다.
<?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="match_parent"
android:layout_height="wrap_content"
android:id="@+id/card_view"
android:layout_margin="5dp"
card_view:cardBackgroundColor="#81C784"
card_view:cardCornerRadius="12dp"
card_view:cardElevation="3dp"
card_view:contentPadding="4dp" >
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="16dp" >
<ImageView
android:layout_width="100dp"
android:layout_height="100dp"
android:id="@+id/item_image"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_marginRight="16dp"
/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/item_title"
android:layout_toRightOf="@+id/item_image"
android:layout_alignParentTop="true"
android:textSize="30sp"
/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/item_detail"
android:layout_toRightOf="@+id/item_image"
android:layout_below="@+id/item_title"
/>
</RelativeLayout>
</android.support.v7.widget.CardView>
CardView 사용자 정의하기
CardView는 카드가 플랫폼 전반에서 일관된 모양을 갖도록 기본 높이와 모서리 반경을 제공합니다.
xml 파일에서 다음 속성을 사용하여 이러한 기본값을 사용자 정의 할 수 있습니다.
-
card_view:cardElevation
속성은 CardView에 표고를 추가합니다. -
card_view:cardBackgroundColor
속성은card_view:cardBackgroundColor
배경의 배경색을 사용자 정의하는 데 사용됩니다 (색상을 지정할 수 있음). -
card_view:cardCornerRadius
속성은card_view:cardCornerRadius
4 가장자리를 커브하는 데 사용됩니다. -
card_view:contentPadding
속성은 카드와 카드 사이에 패딩을 추가합니다.
참고 : card_view는 상위 부모 레이아웃보기에 정의 된 네임 스페이스입니다. xmlns : card_view = " http://schemas.android.com/apk/res-auto "
예를 들면 다음과 같습니다.
<android.support.v7.widget.CardView
xmlns:card_view="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
card_view:cardElevation="4dp"
card_view:cardBackgroundColor="@android:color/white"
card_view:cardCornerRadius="8dp"
card_view:contentPadding="16dp">
<!-- one child layout containing other layouts or views -->
</android.support.v7.widget.CardView>
다음을 사용하여 프로그래밍 방식으로 수행 할 수도 있습니다.
card.setCardBackgroundColor(....);
card.setCardElevation(...);
card.setRadius(....);
card.setContentPadding();
추가 등록 정보는 공식 javadoc 을 확인하십시오.
리플 애니메이션 추가
CardView에서 리플 애니메이션을 사용하려면 다음 속성을 추가하십시오.
<android.support.v7.widget.CardView
...
android:clickable="true"
android:foreground="?android:attr/selectableItemBackground">
...
</android.support.v7.widget.CardView>
CardView에서 이미지를 배경으로 사용 (사전 롤리팝 장치 문제)
CardView에서 Image / Color를 배경으로 사용할 때 가장자리에 약간의 흰색 패딩 (기본 카드 색이 흰색 인 경우)이 생길 수 있습니다. 이것은 카드보기의 기본 둥근 모서리로 인해 발생합니다. Pre-lollipop 기기에서 이러한 여백을 피하는 방법은 다음과 같습니다.
card_view:cardPreventCornerOverlap="false"
속성을 사용해야합니다. 1). XML에서 다음 스 니펫을 사용하십시오.
<android.support.v7.widget.CardView
xmlns:card_view="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
card_view:cardPreventCornerOverlap="false"
android:layout_height="wrap_content">
<ImageView
android:id="@+id/row_wallet_redeem_img"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:adjustViewBounds="true"
android:scaleType="centerCrop"
android:src="@drawable/bg_image" />
</android.support.v7.widget.CardView>
- 자바처럼이
cardView.setPreventCornerOverlap(false)
.
이렇게하면 카드의 가장자리에있는 원하지 않는 패딩이 제거됩니다. 다음은이 구현과 관련된 몇 가지 시각적 예제입니다.
API 21의 이미지 배경이있는 1 개의 카드 (완벽하게 괜찮음)
2 속성없이 API 19의 이미지 배경이있는 카드 (이미지 주위의 여백에주의하십시오)
3 속성 cardView.setPreventCornerOverlap(false)
를 사용하는 API 19의 이미지 배경이있는 고정 카드 (문제가 수정 됨)
또한이 문서 에 대한 자세한 내용은 여기를 참조하십시오.
원래 SOF 게시물은 여기에
TransitionDrawable을 사용하여 CardView 배경색 애니메이션 만들기
public void setCardColorTran(CardView card) {
ColorDrawable[] color = {new ColorDrawable(Color.BLUE), new ColorDrawable(Color.RED)};
TransitionDrawable trans = new TransitionDrawable(color);
if(Build.VERSION.SDK_INT > Build.VERSION_CODES.ICE_CREAM_SANDWICH_MR1) {
card.setBackground(trans);
} else {
card.setBackgroundDrawable(trans);
}
trans.startTransition(5000);
}