팝업 메시지 빌드 및 표시

Compose 방식으로 시도하기
Jetpack Compose는 Android에 권장되는 UI 도구 키트입니다. Compose에서 알림을 추가하는 방법을 알아보세요.

Snackbar을 사용하여 사용자에게 간략한 메시지를 표시할 수 있습니다. 알림과 달리 메시지는 잠시 후 자동으로 사라집니다. Snackbar는 사용자가 조치를 취할 필요가 없는 간단한 메시지에 적합합니다. 예를 들어 이메일 앱은 Snackbar를 사용하여 앱에서 이메일을 성공적으로 전송했음을 사용자에게 알릴 수 있습니다.

CoordinatorLayout 사용

Snackbar는 뷰에 연결되어 있습니다. Snackbar는 일반적인 레이아웃 객체와 같이 View 클래스에서 파생된 객체에 연결된 경우 기본 기능을 제공합니다. 하지만 Snackbar가 CoordinatorLayout에 연결된 경우 Snackbar에 추가 기능이 제공됩니다.

  • 사용자는 Snackbar를 스와이프하여 닫을 수 있습니다.
  • Snackbar이 표시되면 레이아웃이 다른 UI 요소를 이동합니다. 예를 들어 레이아웃에 FloatingActionButton가 있는 경우 레이아웃은 버튼 위에 Snackbar를 그리는 대신 Snackbar를 표시할 때 버튼을 위로 이동합니다. 그림 1에서 이 모양을 확인할 수 있습니다.

CoordinatorLayout 클래스는 FrameLayout의 기능 외에 추가 기능을 제공합니다. 앱에서 이미 FrameLayout를 사용하는 경우 CoordinatorLayout로 레이아웃을 대체하여 전체 Snackbar 기능을 사용 설정할 수 있습니다. 앱에서 다른 레이아웃 객체를 사용하는 경우 다음 예와 같이 기존 레이아웃 요소를 CoordinatorLayout로 래핑합니다.

<androidx.coordinatorlayout.widget.CoordinatorLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/myCoordinatorLayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <!-- Here are the existing layout elements, now wrapped in
         a CoordinatorLayout. -->
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">

        <!-- ...Toolbar, other layouts, other elements... -->

    </LinearLayout>

</androidx.coordinatorlayout.widget.CoordinatorLayout>

CoordinatorLayout에 android:id 태그를 설정합니다. 메시지를 표시할 때는 레이아웃의 ID가 필요합니다.

그림 1. CoordinatorLayout는 Snackbar가 표시되면 FloatingActionButton를 위로 이동합니다.

메시지 표시

메시지를 표시하는 단계는 두 가지가 있습니다. 먼저 메시지 텍스트를 사용하여 Snackbar 객체를 만듭니다. 그런 다음 객체의 show() 메서드를 호출하여 사용자에게 메시지를 표시합니다.

스낵바 객체 만들기

정적 Snackbar.make() 메서드를 호출하여 Snackbar 객체를 만듭니다. Snackbar를 만들 때 표시할 메시지와 메시지를 표시할 시간을 지정합니다.

val mySnackbar = Snackbar.make(view, stringId, duration)
보기
Snackbar을 연결할 뷰입니다. 이 메서드는 전달된 뷰에서 뷰 계층 구조를 검색하여 CoordinatorLayout 또는 창 장식의 콘텐츠 뷰에 도달합니다. 일반적으로 콘텐츠를 둘러싸는 CoordinatorLayout를 전달하는 것이 더 간단합니다.
stringId
표시할 메시지의 리소스 ID입니다. 형식이 지정된 텍스트 또는 형식이 지정되지 않은 텍스트일 수 있습니다.
기간
메시지를 표시할 시간입니다. 이 값은 LENGTH_SHORT 또는 LENGTH_LONG입니다.

사용자에게 메시지 표시

Snackbar를 만든 후 show() 메서드를 호출하여 사용자에게 Snackbar를 표시합니다.

mySnackbar.show()

시스템은 여러 Snackbar 객체를 동시에 표시하지 않으므로 뷰에 현재 다른 Snackbar가 표시되고 있다면 시스템은 Snackbar를 대기열에 추가하고 현재 Snackbar가 만료되거나 닫힌 후 표시합니다.

사용자에게 메시지를 표시하고 Snackbar 객체의 유틸리티 메서드를 호출할 필요가 없는 경우 show()를 호출한 후 Snackbar에 대한 참조를 유지할 필요가 없습니다. 이러한 이유로 메서드 체이닝을 사용하여 하나의 문에서 Snackbar를 만들고 표시하는 것이 일반적입니다.

Snackbar.make(
    findViewById(R.id.myCoordinatorLayout),
    R.string.email_sent,
    Snackbar.LENGTH_SHORT
).show()