Android

Android 깔끔한 UI 디자인을 위한 CardView 활용법

임베디드 친구 2024. 10. 23. 21:05
반응형

안녕하세요! 오늘은 안드로이드 애플리케이션 개발에서 자주 사용되는 UI 컴포넌트 중 하나인 CardView에 대해 알아보겠습니다. CardView는 정보를 카드 형태로 시각적으로 깔끔하게 표현할 수 있어, 리스트나 중요한 정보를 보여줄 때 유용하게 사용할 수 있습니다. 이번 포스팅에서는 CardView의 사용법과 활용 예제를 Kotlin 코드와 함께 살펴보도록 하겠습니다.

CardView란?

CardView는 안드로이드에서 카드 스타일의 레이아웃을 만들어주는 뷰 그룹입니다. 그림자와 모서리 곡률을 쉽게 설정할 수 있어서, 깔끔한 사용자 인터페이스를 만드는데 매우 유용합니다. 또한, Material Design의 스타일을 따르는 카드 레이아웃을 구성할 수 있어 앱의 시각적 매력을 높일 수 있습니다.

CardView는 일반적으로 RecyclerView와 함께 사용되어 여러 개의 카드를 리스트 형태로 보여줄 때 자주 활용됩니다. 하지만 단일 화면에서도 정보를 효과적으로 정리하고 싶은 경우 CardView를 사용하면 좋습니다.

CardView 사용하기

1. 의존성 추가하기

CardView를 사용하기 위해서는 프로젝트의 build.gradle 파일에 의존성을 추가해야 합니다. 아래 코드를 참고하세요.

implementation 'androidx.cardview:cardview:1.0.0'

이 의존성을 추가한 후에, CardView를 XML 레이아웃 파일에서 사용할 수 있습니다.

2. CardView 레이아웃 작성하기

CardView를 사용하여 레이아웃을 작성하는 방법을 알아보겠습니다. 우선 XML 파일에서 CardView를 정의하는 방법을 살펴보겠습니다.

<androidx.cardview.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:layout_margin="16dp"
    card_view:cardCornerRadius="8dp"
    card_view:cardElevation="4dp">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:padding="16dp">

        <TextView
            android:id="@+id/card_title"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="CardView Example"
            android:textSize="18sp"
            android:textStyle="bold" />

        <TextView
            android:id="@+id/card_description"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="This is an example of CardView in Android."
            android:textSize="14sp"
            android:layout_marginTop="8dp" />

    </LinearLayout>
</androidx.cardview.widget.CardView>

위의 XML 코드는 CardView와 그 안에 LinearLayout을 포함한 예제입니다. 이 레이아웃은 제목과 설명을 표시하는 간단한 CardView를 구성합니다.

  • cardCornerRadius: CardView의 모서리 곡률을 설정합니다.
  • cardElevation: 그림자 효과의 깊이를 설정합니다.
  • padding: CardView 내부의 콘텐츠와의 여백을 설정합니다.

3. Kotlin 코드로 CardView 사용하기

CardView를 더 잘 활용하기 위해 Kotlin 코드와 함께 사용하는 방법을 살펴보겠습니다. 이 예제에서는 CardView를 클릭했을 때 다른 액션을 수행하는 방법도 포함하고 있습니다.

import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import androidx.cardview.widget.CardView
import android.widget.Toast

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val cardView = findViewById<CardView>(R.id.card_view)

        cardView.setOnClickListener {
            Toast.makeText(this, "CardView clicked!", Toast.LENGTH_SHORT).show()
        }
    }
}

위의 코드에서는 activity_main.xml 파일에 정의된 CardView를 가져와 클릭 이벤트를 설정하고 있습니다. 사용자가 CardView를 클릭했을 때 토스트 메시지를 출력하도록 설정하여 CardView가 동작하는 방식을 간단히 보여줍니다.

CardView 활용 예제: RecyclerView와 함께 사용하기

CardView는 RecyclerView와 함께 사용할 때 더욱 유용합니다. 여러 개의 CardView를 리스트 형태로 보여주면, 사용자 경험이 크게 향상될 수 있습니다. 아래는 CardView를 RecyclerView와 함께 사용하는 간단한 예제입니다.

1. 레이아웃 파일 작성

먼저 개별 아이템의 레이아웃을 정의합니다. 이 파일은 res/layout/item_card.xml에 저장될 것입니다.

<androidx.cardview.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:layout_margin="8dp"
    card_view:cardCornerRadius="8dp"
    card_view:cardElevation="4dp">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:padding="16dp">

        <TextView
            android:id="@+id/item_title"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Item Title"
            android:textSize="18sp"
            android:textStyle="bold" />

        <TextView
            android:id="@+id/item_description"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Item Description"
            android:textSize="14sp"
            android:layout_marginTop="8dp" />

    </LinearLayout>
</androidx.cardview.widget.CardView>

2. RecyclerView 어댑터 작성

이제 RecyclerView 어댑터를 작성하여 각 아이템을 CardView 형태로 표시해 보겠습니다.

import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.TextView
import androidx.cardview.widget.CardView
import androidx.recyclerview.widget.RecyclerView

class ItemAdapter(private val itemList: List<Item>) : RecyclerView.Adapter<ItemAdapter.ItemViewHolder>() {

    class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
        val cardView: CardView = itemView.findViewById(R.id.card_view)
        val title: TextView = itemView.findViewById(R.id.item_title)
        val description: TextView = itemView.findViewById(R.id.item_description)
    }

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder {
        val view = LayoutInflater.from(parent.context).inflate(R.layout.item_card, parent, false)
        return ItemViewHolder(view)
    }

    override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
        val item = itemList[position]
        holder.title.text = item.title
        holder.description.text = item.description

        holder.cardView.setOnClickListener {
            // 카드 클릭 시 동작 설정
        }
    }

    override fun getItemCount(): Int {
        return itemList.size
    }
}

3. 데이터 클래스 정의

리스트 아이템을 담을 데이터 클래스를 정의합니다.

data class Item(val title: String, val description: String)

4. RecyclerView와 연결하기

마지막으로, RecyclerView를 Activity에서 설정하고 어댑터와 연결합니다.

import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val recyclerView = findViewById<RecyclerView>(R.id.recycler_view)
        recyclerView.layoutManager = LinearLayoutManager(this)

        val itemList = listOf(
            Item("Title 1", "Description 1"),
            Item("Title 2", "Description 2"),
            Item("Title 3", "Description 3")
        )

        val adapter = ItemAdapter(itemList)
        recyclerView.adapter = adapter
    }
}

결론

CardView는 깔끔하고 정돈된 UI를 구성할 때 매우 유용한 컴포넌트입니다. 특히 RecyclerView와 함께 사용하면 리스트 아이템을 효과적으로 표현할 수 있어 사용자 경험을 개선하는 데 큰 도움을 줍니다. 이번 포스팅에서는 CardView의 기본 사용법과 RecyclerView와의 조합에 대해 알아보았습니다.

다음 시간에는 더 다양한 안드로이드 UI 컴포넌트를 활용해 볼 예정이니 기대해 주세요! 블로그 '소프트웨어 공장'과 함께라면 여러분도 멋진 안드로이드 애플리케이션을 만들 수 있습니다. 감사합니다!

반응형