Android Dev Summit, October 23-24: two days of technical content, directly from the Android team. Sign-up for livestream updates.

Tổng quan về thông báo

Thông báo nhanh cung cấp thông tin phản hồi dễ hiểu về thao tác trong cửa sổ nhỏ bật lên. Thông báo này chỉ chiếm lượng không gian cần thiết để hiển thị nội dung thông báo. Bạn vẫn có thể nhìn thấy và tương tác với hoạt động hiện tại. Thông báo nhanh tự động biến mất sau khi hết thời gian hiển thị.

Ví dụ: khi bạn nhấp vào Gửi trên một email, thông báo nhanh "Đang gửi thư..." sẽ xuất hiện, như trong ảnh chụp màn hình dưới đây:

Nếu bắt buộc phải có phản hồi của người dùng cho thông báo trạng thái, hãy cân nhắc sử dụng Thông báo.

Kiến thức cơ bản

Trước tiên, hãy tạo đối tượng Toast bằng một trong các phương thức makeText(). Phương thức này cần 3 thông số: Context ứng dụng, tin nhắn văn bản và thời lượng của thông báo nhanh. Thao tác này sẽ trả về một đối tượng Thông báo nhanh được khởi tạo đúng cách. Bạn có thể hiển thị thông báo nhanh bằng thông số show(), như minh họa trong ví dụ sau đây:

Kotlin

    val text = "Hello toast!"
    val duration = Toast.LENGTH_SHORT

    val toast = Toast.makeText(applicationContext, text, duration)
    toast.show()
    

Java

    Context context = getApplicationContext();
    CharSequence text = "Hello toast!";
    int duration = Toast.LENGTH_SHORT;

    Toast toast = Toast.makeText(context, text, duration);
    toast.show();
    

Ví dụ này thể hiện mọi thông số mà bạn cần cho hầu hết các thông báo nhanh. Bạn hiếm khi cần thông số nào khác. Tuy nhiên, bạn có thể muốn đặt thông báo nhanh ở vị trí khác hay thậm chí muốn sử dụng bố cục của riêng mình thay vì một tin nhắn văn bản thông thường. Bạn có thể thực hiện những điều này bằng cách làm theo các phần sau đây.

Bạn cũng có thể xâu chuỗi các phương thức và tránh giữ đối tượng Thông báo nhanh, giống như sau:

Kotlin

    Toast.makeText(context, text, duration).show()
    

Java

    Toast.makeText(context, text, duration).show();
    

Đặt vị trí cho thông báo nhanh

Một thông báo nhanh thông thường hiển thị theo chiều ngang ở chính giữa gần cuối màn hình. Bạn có thể thay đổi vị trí này bằng phương thức setGravity(int, int, int) . Phương thức nói trên chấp nhận 3 thông số: hằng số Gravity, giá trị bù x-position và giá trị bù y-position.

Ví dụ: nếu quyết định rằng thông báo nhanh sẽ xuất hiện ở góc trên cùng bên trái, bạn có thể đặt hằng số gravity như sau:

Kotlin

    toast.setGravity(Gravity.TOP or Gravity.LEFT, 0, 0)
    

Java

    toast.setGravity(Gravity.TOP|Gravity.LEFT, 0, 0);
    

Nếu bạn muốn dịch chuyển vị trí sang phải, hãy tăng giá trị của thông số thứ hai. Để dịch chuyển xuống, hãy tăng giá trị của thông số cuối cùng.

Tạo chế độ xem thông báo nhanh tùy chỉnh

Nếu một tin nhắn văn bản thông thường là chưa đủ, bạn có thể tạo bố cục tùy chỉnh cho thông báo nhanh của mình. Để tạo bố cục tùy chỉnh, hãy xác định bố cục Chế độ xem trong XML hoặc trong mã ứng dụng của bạn và chuyển đối tượng View gốc sang phương thức setView(View) .

Đoạn mã sau chứa bố cục tùy chỉnh cho một thông báo nhanh (lưu dưới dạng layout/custom_toast.xml):

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
                  android:id="@+id/custom_toast_container"
                  android:orientation="horizontal"
                  android:layout_width="fill_parent"
                  android:layout_height="fill_parent"
                  android:padding="8dp"
                  android:background="#DAAA"
                  >
        <ImageView android:src="@drawable/droid"
                   android:layout_width="wrap_content"
                   android:layout_height="wrap_content"
                   android:layout_marginRight="8dp"
                   />
        <TextView android:id="@+id/text"
                  android:layout_width="wrap_content"
                  android:layout_height="wrap_content"
                  android:textColor="#FFF"
                  />
    </LinearLayout>
    

Lưu ý rằng ID của phần tử LinearLayout là "custom_toast_container". Bạn phải sử dụng ID này và ID của tệp bố cục XML "custom_toast" để tăng cường cho bố cục, như hiển thị dưới đây:

Kotlin

    val inflater = layoutInflater
    val container: ViewGroup = findViewById(R.id.custom_toast_container)
    val layout: ViewGroup = inflater.inflate(R.layout.custom_toast, container)
    val text: TextView = layout.findViewById(R.id.text)
    text.text = "This is a custom toast"
    with (Toast(applicationContext)) {
        setGravity(Gravity.CENTER_VERTICAL, 0, 0)
        duration = Toast.LENGTH_LONG
        view = layout
        show()
    }
    

Java

    LayoutInflater inflater = getLayoutInflater();
    View layout = inflater.inflate(R.layout.custom_toast,
                    (ViewGroup) findViewById(R.id.custom_toast_container));

    TextView text = (TextView) layout.findViewById(R.id.text);
    text.setText("This is a custom toast");

    Toast toast = new Toast(getApplicationContext());
    toast.setGravity(Gravity.CENTER_VERTICAL, 0, 0);
    toast.setDuration(Toast.LENGTH_LONG);
    toast.setView(layout);
    toast.show();
    

Trước tiên, hãy truy xuất LayoutInflater bằng getLayoutInflater() (hoặc getSystemService()), sau đó, tăng cường bố cục từ XML bằng inflate(int, ViewGroup). Thông số đầu tiên là ID tài nguyên bố cục và thông số thứ hai là Chế độ xem gốc. Bạn có thể sử dụng bố cục tăng cường này để tìm thêm đối tượng Chế độ xem trong bố cục, vì thế bây giờ hãy ghi lại và xác định nội dung cho các phần tử ImageView và TextView. Cuối cùng, hãy tạo một Thông báo nhanh mới bằng Toast(Context) và đặt một số thuộc tính cho thông báo nhanh này, chẳng hạn như thuộc tính gravity và duration. Tiếp đến, hãy gọi setView(View) và chuyển phương thức đó vào bố cục tăng cường. Lúc này, bạn có thể hiển thị thông báo nhanh với bố cục tùy chỉnh bằng cách gọi show().

Lưu ý: Không sử dụng hàm tạo công khai cho Thông báo nhanh trừ khi bạn dự kiến xác định bố cục bằng setView(View). Nếu không có bố cục tùy chỉnh để sử dụng, bạn phải dùng makeText(Context, int, int) để tạo Thông báo nhanh.