Bạn có thể dùng Snackbar để hiển thị một thông báo ngắn gọn cho người dùng. Không giống như Thông báo, thông báo này sẽ tự động biến mất sau một khoảng thời gian ngắn. Snackbar là lựa chọn lý tưởng cho những thông báo ngắn mà người dùng không cần phải hành động. Ví dụ: một ứng dụng email có thể dùng Snackbar để cho người dùng biết rằng ứng dụng đã gửi email thành công.
Sử dụng CoordinatorLayout
Snackbar được đính kèm vào một khung hiển thị. Snackbar cung cấp chức năng cơ bản nếu được đính kèm vào bất kỳ đối tượng nào bắt nguồn từ lớp View, chẳng hạn như bất kỳ đối tượng bố cục chung nào. Tuy nhiên, nếu Snackbar được đính kèm vào CoordinatorLayout, thì Snackbar sẽ có thêm các tính năng sau:
- Người dùng có thể đóng
Snackbarbằng cách vuốt để loại bỏ. - Bố cục này di chuyển các phần tử khác trên giao diện người dùng khi
Snackbarxuất hiện. Ví dụ: nếu bố cục có mộtFloatingActionButton, thì bố cục sẽ di chuyển nút lên khi hiển thị mộtSnackbar, thay vì vẽSnackbarlên trên nút. Bạn có thể xem hình 1 để biết giao diện của tính năng này.
Lớp CoordinatorLayout cung cấp một siêu tập hợp chức năng của FrameLayout.
Nếu ứng dụng của bạn đã sử dụng FrameLayout, bạn có thể thay thế bố cục đó bằng CoordinatorLayout để bật đầy đủ chức năng của Snackbar. Nếu ứng dụng của bạn sử dụng các đối tượng bố cục khác, hãy gói các phần tử bố cục hiện có trong một CoordinatorLayout, như minh hoạ trong ví dụ sau:
<android.support.design.widget.CoordinatorLayout android:id="@+id/myCoordinatorLayout" xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" 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> </android.support.design.widget.CoordinatorLayout>
Đặt thẻ android:id cho CoordinatorLayout.
Bạn cần có mã nhận dạng của bố cục khi hiển thị thông báo.
Hình 1. CoordinatorLayout sẽ di chuyển FloatingActionButton lên khi Snackbar xuất hiện.
Hiển thị thông báo
Có 2 bước để hiển thị một thông báo. Trước tiên, bạn sẽ tạo một đối tượng Snackbar bằng văn bản thông báo. Sau đó, bạn gọi phương thức show() của đối tượng đó để hiển thị thông báo cho người dùng.
Tạo đối tượng Snackbar
Tạo một đối tượng Snackbar bằng cách gọi phương thức tĩnh Snackbar.make(). Khi bạn tạo Snackbar, hãy chỉ định thông báo mà Snackbar hiển thị và khoảng thời gian hiển thị thông báo:
Kotlin
val mySnackbar = Snackbar.make(view, stringId, duration)
Java
Snackbar mySnackbar = Snackbar.make(view, stringId, duration);
- xem
-
Khung hiển thị để đính kèm
Snackbarvào. Phương thức này tìm kiếm trong hệ phân cấp view từ khung hiển thị đã truyền cho đến khi đạt đếnCoordinatorLayouthoặc khung hiển thị nội dung của cửa sổ. Thông thường, bạn chỉ cần truyềnCoordinatorLayoutbao quanh nội dung của mình. - stringId
- Mã tài nguyên của thông báo bạn muốn hiển thị. Đây có thể là văn bản có định dạng hoặc văn bản không có định dạng.
- thời lượng
-
Khoảng thời gian hiển thị thông báo. Giá trị này có thể là
LENGTH_SHORThoặcLENGTH_LONG.
Hiện thông báo cho người dùng
Sau khi bạn tạo Snackbar, hãy gọi phương thức show() để hiển thị Snackbar cho người dùng:
Kotlin
mySnackbar.show()
Java
mySnackbar.show();
Hệ thống không hiển thị nhiều đối tượng Snackbar cùng lúc, vì vậy, nếu khung hiển thị hiện đang hiển thị một Snackbar khác, hệ thống sẽ xếp hàng Snackbar của bạn và hiển thị sau khi Snackbar hiện tại hết hạn hoặc bị loại bỏ.
Nếu muốn cho người dùng thấy một thông báo và không cần gọi bất kỳ phương thức tiện ích nào của đối tượng Snackbar, thì bạn không cần giữ lại tham chiếu đến Snackbar sau khi gọi show(). Vì lý do này, bạn thường dùng phương thức liên kết để tạo và hiện Snackbar trong một câu lệnh:
Kotlin
Snackbar.make( findViewById(R.id.myCoordinatorLayout), R.string.email_sent, Snackbar.LENGTH_SHORT ).show()
Java
Snackbar.make(findViewById(R.id.myCoordinatorLayout), R.string.email_sent, Snackbar.LENGTH_SHORT) .show();