카드

Card 컴포저블은 UI의 Material Design 컨테이너 역할을 합니다. 카드는 일반적으로 하나의 일관된 콘텐츠를 나타냅니다. 다음은 카드를 사용할 수 있는 위치의 몇 가지 예입니다.

  • 쇼핑 앱의 제품
  • 뉴스 앱의 뉴스 기사
  • 커뮤니케이션 앱의 메시지

다른 컨테이너와 Card를 구별하는 단일 콘텐츠를 나타내는 데 중점을 둡니다. 예를 들어 Scaffold는 전체 화면에 일반적인 구조를 제공합니다. 카드는 일반적으로 큰 레이아웃 내의 작은 UI 요소인 반면, Column 또는 Row와 같은 레이아웃 구성요소는 더 간단하고 일반적인 API를 제공합니다.

텍스트와 아이콘으로 채워진 돌출형 카드입니다.
그림 1. 텍스트와 아이콘으로 채워진 카드의 예

기본 구현

Card는 Compose의 다른 컨테이너와 매우 유사하게 작동합니다. 콘텐츠 내에 있는 다른 컴포저블을 호출하여 콘텐츠를 선언합니다. 예를 들어 아래의 간단한 예시에서 CardText 호출이 어떻게 포함되는지 생각해 보세요.

@Composable
fun CardMinimalExample() {
    Card() {
        Text(text = "Hello, world!")
    }
}

고급 구현

Card의 API 정의는 참조를 확인하세요. 구성요소의 모양과 동작을 맞춤설정할 수 있는 여러 매개변수를 정의합니다.

유의해야 할 주요 매개변수는 다음과 같습니다.

  • elevation: 구성요소에 그림자를 추가하여 배경 위로 올라가게 합니다.
  • colors: CardColors 유형을 사용하여 컨테이너와 모든 하위 요소의 기본 색상을 설정합니다.
  • enabled: 이 매개변수에 false를 전달하면 카드가 사용 중지된 것으로 표시되고 사용자 입력에 응답하지 않습니다.
  • onClick: 일반적으로 Card는 클릭 이벤트를 허용하지 않습니다. 따라서 주목해야 할 기본 오버로드는 onClick 매개변수를 정의하는 것입니다. Card의 구현이 사용자의 누르기에 응답하도록 하려면 이 오버로드를 사용해야 합니다.

다음 예는 이러한 매개변수와 함께 shapemodifier와 같은 다른 일반적인 매개변수를 사용하는 방법을 보여줍니다.

채워진 카드

다음은 채워진 카드를 구현하는 방법을 보여주는 예입니다.

여기서 핵심은 colors 속성을 사용하여 음영 색상을 변경하는 것입니다.

@Composable
fun FilledCardExample() {
    Card(
        colors = CardDefaults.cardColors(
            containerColor = MaterialTheme.colorScheme.surfaceVariant,
        ),
        modifier = Modifier
            .size(width = 240.dp, height = 100.dp)
    ) {
        Text(
            text = "Filled",
            modifier = Modifier
                .padding(16.dp),
            textAlign = TextAlign.Center,
        )
    }
}

이 구현은 다음과 같이 표시됩니다.

카드가 머티리얼 테마의 표면 변형 색상으로 채워집니다.
그림 2. 채워진 카드의 예

상승된 카드

다음 스니펫은 승격된 카드를 구현하는 방법을 보여줍니다. 전용 ElevatedCard 컴포저블을 사용합니다.

elevation 속성을 사용하여 고도의 모양과 그에 따른 그림자를 제어할 수 있습니다.

@Composable
fun ElevatedCardExample() {
    ElevatedCard(
        elevation = CardDefaults.cardElevation(
            defaultElevation = 6.dp
        ),
        modifier = Modifier
            .size(width = 240.dp, height = 100.dp)
    ) {
        Text(
            text = "Elevated",
            modifier = Modifier
                .padding(16.dp),
            textAlign = TextAlign.Center,
        )
    }
}

이 구현은 다음과 같이 표시됩니다.

카드가 앱 배경 위로 올라가고 그림자가 있습니다.
그림 3. 승격된 카드의 예

윤곽선이 있는 카드

다음은 개요 카드의 예입니다. 전용 OutlinedCard 컴포저블을 사용합니다.

@Composable
fun OutlinedCardExample() {
    OutlinedCard(
        colors = CardDefaults.cardColors(
            containerColor = MaterialTheme.colorScheme.surface,
        ),
        border = BorderStroke(1.dp, Color.Black),
        modifier = Modifier
            .size(width = 240.dp, height = 100.dp)
    ) {
        Text(
            text = "Outlined",
            modifier = Modifier
                .padding(16.dp),
            textAlign = TextAlign.Center,
        )
    }
}

이 구현은 다음과 같이 표시됩니다.

카드는 얇은 검은색 테두리로 윤곽선이 표시됩니다.
그림 4. 개요 카드의 예

제한사항

카드에는 고유한 스크롤 또는 닫기 작업이 없지만 이러한 기능을 제공하는 컴포저블에 통합할 수 있습니다. 예를 들어 스와이프하여 카드를 닫는 기능을 구현하려면 SwipeToDismiss 컴포저블과 통합합니다. 스크롤과 통합하려면 verticalScroll와 같은 스크롤 수정자를 사용하세요. 자세한 내용은 스크롤 문서를 참고하세요.

추가 리소스