Snackbar를 사용하여 간략한 메시지를 사용자에게 표시할 수 있습니다. 알림과 달리 이 메시지는 잠시 후에 자동으로 사라집니다. Snackbar는 사용자가 조치를 취할 필요가 없는 간단한 메시지에 적합합니다. 예를 들어 이메일 앱에서 Snackbar를 사용하여 앱에서 이메일이 성공적으로 전송되었다고 사용자에게 알릴 수 있습니다.
CoordinatorLayout 사용
Snackbar는 뷰에 연결되어 있습니다. Snackbar가 View 클래스에서 파생된 객체(예: 일반적인 레이아웃 객체)에 연결된 경우 기본 기능을 제공합니다. 그러나 Snackbar가 CoordinatorLayout에 연결된 경우 Snackbar에는 다음과 같은 기능이 추가됩니다.
사용자는 Snackbar를 스와이프하여 닫을 수 있습니다.
Snackbar가 표시되면 레이아웃에서 다른 UI 요소를 이동합니다.
예를 들어 레이아웃에 FloatingActionButton가 있으면 레이아웃은 버튼 위에 Snackbar를 그리는 대신 Snackbar를 표시할 때 버튼을 위로 이동합니다. 표시되는 방식은 그림 1에서 확인할 수 있습니다.
CoordinatorLayout 클래스는 FrameLayout 기능의 상위 집합을 제공합니다.
앱에서 이미 FrameLayout을 사용한다면 이 레이아웃을 CoordinatorLayout으로 바꾸기만 하면 전체 Snackbar 기능을 사용 설정할 수 있습니다. 앱에서 다른 레이아웃 객체를 사용하는 경우 다음 예와 같이 CoordinatorLayout로 기존 레이아웃 요소를 래핑합니다.
Snackbar를 만든 후 show() 메서드를 호출하여 Snackbar를 사용자에게 표시합니다.
Kotlin
mySnackbar.show()
자바
mySnackbar.show();
시스템은 여러 Snackbar 객체를 동시에 표시하지 않으므로 뷰에서 현재 다른 Snackbar가 표시되고 있다면 시스템은 Snackbar를 대기열에 추가하고 현재 Snackbar가 만료되거나 닫힌 후 표시합니다.
사용자에게 메시지를 표시하려고 하며 Snackbar 객체의 유틸리티 메서드를 호출하지 않아도 되는 경우 show()를 호출한 후 Snackbar 참조를 유지하지 않아도 됩니다. 따라서 메서드 체이닝을 사용하여 구문 하나로 Snackbar를 만들고 표시하는 것이 일반적입니다.
이 페이지에 나와 있는 콘텐츠와 코드 샘플에는 콘텐츠 라이선스에서 설명하는 라이선스가 적용됩니다. 자바 및 OpenJDK는 Oracle 및 Oracle 계열사의 상표 또는 등록 상표입니다.
최종 업데이트: 2025-07-26(UTC)
[[["이해하기 쉬움","easyToUnderstand","thumb-up"],["문제가 해결됨","solvedMyProblem","thumb-up"],["기타","otherUp","thumb-up"]],[["필요한 정보가 없음","missingTheInformationINeed","thumb-down"],["너무 복잡함/단계 수가 너무 많음","tooComplicatedTooManySteps","thumb-down"],["오래됨","outOfDate","thumb-down"],["번역 문제","translationIssue","thumb-down"],["샘플/코드 문제","samplesCodeIssue","thumb-down"],["기타","otherDown","thumb-down"]],["최종 업데이트: 2025-07-26(UTC)"],[],[],null,["# Build and display a pop-up message\n\nTry the Compose way \nJetpack Compose is the recommended UI toolkit for Android. Learn how to add notifications in Compose. \n[Snackbar →](/develop/ui/compose/components/snackbar) \n\nYou can use a\n[Snackbar](/reference/com/google/android/material/snackbar/Snackbar) to\ndisplay a brief message to the user. Unlike\n[Notifications](/guide/topics/ui/notifiers/notifications), the\nmessage automatically goes away after a short period. A `Snackbar` is\nideal for brief messages that the user doesn't need to act on. For example, an\nemail app can use a `Snackbar` to tell the user that the app\nsuccessfully sent an email.\n\nUse a CoordinatorLayout\n-----------------------\n\nA `Snackbar` is attached to a view. The `Snackbar`\nprovides basic functionality if it is attached to any object derived from the\n[View](/reference/android/view/View) class, such as\nany of the common layout objects. However, if the `Snackbar` is\nattached to a\n[CoordinatorLayout](/reference/androidx/coordinatorlayout/widget/CoordinatorLayout),\nthe `Snackbar` gains additional features:\n\n- The user can dismiss the `Snackbar` by swiping it away.\n- The layout moves other UI elements when the `Snackbar` appears. For example, if the layout has a [FloatingActionButton](/reference/com/google/android/material/floatingactionbutton/FloatingActionButton), the layout moves the button up when it shows a `Snackbar`, instead of drawing the `Snackbar` on top of the button. You can see how this looks in figure 1.\n\nThe `CoordinatorLayout` class provides a superset of the\nfunctionality of\n[FrameLayout](/reference/android/widget/FrameLayout).\nIf your app already uses a `FrameLayout`, you can replace that layout\nwith a `CoordinatorLayout` to enable the full `Snackbar`\nfunctionality. If your app uses other layout objects, wrap your existing layout\nelements in a `CoordinatorLayout`, as shown in the following\nexample: \n\n```xml\n\u003candroid.support.design.widget.CoordinatorLayout\n android:id=\"@+id/myCoordinatorLayout\"\n xmlns:android=\"http://schemas.android.com/apk/res/android\"\n xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n android:layout_width=\"match_parent\"\n android:layout_height=\"match_parent\"\u003e\n\n \u003c!-- Here are the existing layout elements, now wrapped in\n a CoordinatorLayout. --\u003e\n \u003cLinearLayout\n android:layout_width=\"match_parent\"\n android:layout_height=\"match_parent\"\n android:orientation=\"vertical\"\u003e\n\n \u003c!-- ...Toolbar, other layouts, other elements... --\u003e\n\n \u003c/LinearLayout\u003e\n\n\u003c/android.support.design.widget.CoordinatorLayout\u003e\n```\n\nSet an `android:id` tag for your `CoordinatorLayout`.\nYou need the layout's ID when you display the message.\n\n\n**Figure 1.** The `CoordinatorLayout` moves the\n`FloatingActionButton` up when the `Snackbar` appears.\n\nDisplay a message\n-----------------\n\nThere are two steps to displaying a message. First, you create a\n`Snackbar` object with the message text. Then, you call that object's\n[show()](/reference/com/google/android/material/snackbar/BaseTransientBottomBar#show())\nmethod to display the message to the user.\n\n### Create a Snackbar object\n\nCreate a `Snackbar` object by calling the static\n[Snackbar.make()](/reference/com/google/android/material/snackbar/Snackbar#make(android.view.View, int, int))\nmethod. When you create the `Snackbar`, specify the message it\ndisplays and the length of time to show the message: \n\n### Kotlin\n\n```kotlin\nval mySnackbar = Snackbar.make(view, stringId, duration)\n```\n\n### Java\n\n```java\nSnackbar mySnackbar = Snackbar.make(view, stringId, duration);\n```\n\n\nview\n:\n The view to attach the `Snackbar` to. The method searches up the\n view hierarchy from the passed view until it reaches a\n `CoordinatorLayout` or the window decor's content view.\n Ordinarily, it's simpler to pass the `CoordinatorLayout`\n enclosing your content.\n\n\nstringId\n:\n The resource ID of the message you want to display. This can be formatted or\n unformatted text.\n\n\nduration\n:\n The length of time to show the message. This can be\n [LENGTH_SHORT](/reference/com/google/android/material/snackbar/BaseTransientBottomBar#LENGTH_SHORT))\n or\n [LENGTH_LONG](/reference/com/google/android/material/snackbar/BaseTransientBottomBar#LENGTH_LONG).\n\n### Show the message to the user\n\nAfter you create the `Snackbar`, call its `show()`\nmethod to display the `Snackbar` to the user: \n\n### Kotlin\n\n```kotlin\nmySnackbar.show()\n```\n\n### Java\n\n```java\nmySnackbar.show();\n```\n\nThe system doesn't show multiple `Snackbar` objects at the same\ntime, so if the view is currently displaying another `Snackbar`, the\nsystem queues your `Snackbar` and displays it after the current\n`Snackbar` expires or is dismissed.\n\nIf you want to show a message to the user and don't need to call any of the\n`Snackbar` object's utility methods, you don't need to keep the\nreference to the `Snackbar` after you call `show()`. For\nthis reason, it's common to use method chaining to create and show a\n`Snackbar` in one statement: \n\n### Kotlin\n\n```kotlin\nSnackbar.make(\n findViewById(R.id.myCoordinatorLayout),\n R.string.email_sent,\n Snackbar.LENGTH_SHORT\n).show()\n```\n\n### Java\n\n```java\nSnackbar.make(findViewById(R.id.myCoordinatorLayout), R.string.email_sent,\n Snackbar.LENGTH_SHORT)\n .show();\n```"]]