ภาพรวมของข้อความโทสต์

ข้อความโทสต์ให้คำอธิบายอย่างง่ายๆ เกี่ยวกับการดำเนินการหนึ่งๆ ในป๊อปอัปขนาดเล็ก โดยจะใช้พื้นที่เท่าที่จำเป็นสำหรับข้อความ คุณจะยังคงเห็นกิจกรรมในปัจจุบันและโต้ตอบได้ ข้อความโทสต์จะหายไปโดยอัตโนมัติหลังจากหมดเวลา

ตัวอย่างเช่น การคลิกส่งในอีเมลจะทำให้ข้อความโทสต์ "กำลังส่งข้อความ..." แสดงขึ้น ดังภาพหน้าจอด้านล่าง

หากต้องการให้ผู้ใช้ตอบสนองต่อข้อความสถานะ ให้พิจารณาใช้การแจ้งเตือนแทน

พื้นฐาน

ก่อนอื่น ให้สร้างอินสแตนซ์ของออบเจ็กต์ Toast ด้วยเมธอดอย่างใดอย่างหนึ่งของ makeText() เมธอดนี้ใช้พารามิเตอร์ 3 ตัว ได้แก่ Context ของแอปพลิเคชัน ข้อความ และระยะเวลาของข้อความโทสต์ โดยจะส่งออบเจ็กต์ Toast ที่กำหนดค่าตั้งต้นอย่างถูกต้องกลับมา คุณแสดงการแจ้งเตือนของข้อความโทสต์ได้ด้วย show() ดังตัวอย่างต่อไปนี้

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();
    

ตัวอย่างนี้แสดงทุกสิ่งที่ต้องใช้ในการแจ้งเตือนด้วยข้อความโทสต์โดยส่วนใหญ่ คุณแทบจะไม่ต้องใช้สิ่งอื่นใดอีก อย่างไรก็ตาม คุณอาจต้องการจัดวางข้อความโทสต์ในลักษณะอื่นหรือแม้แต่ใช้เลย์เอาต์ของคุณเองแทนการใช้ข้อความธรรมดา ซึ่งดูวิธีการได้ในส่วนต่างๆ ต่อไปนี้

นอกจากนี้คุณจะเชื่อมโยงเมธอดต่างๆ เข้าด้วยกันและหลีกเลี่ยงการใช้ออบเจ็กต์ Toast ตลอดเวลาได้ด้วย ดังตัวอย่างนี้

Kotlin

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

Java

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

การจัดวางข้อความโทสต์

การแจ้งเตือนด้วยข้อความโทสต์แบบมาตรฐานจะปรากฏใกล้กับด้านล่างของหน้าจอตรงกึ่งกลางในแนวนอน คุณเปลี่ยนตำแหน่งนี้ได้ด้วยเมธอด setGravity(int, int, int) ซึ่งยอมรับพารามิเตอร์ 3 ตัว ได้แก่ ค่าคงที่ Gravity, ออฟเซ็ตตำแหน่ง X และออฟเซ็ตตำแหน่ง Y

ตัวอย่างเช่น หากตัดสินใจว่าข้อความโทสต์ควรปรากฏที่มุมซ้ายบน คุณจะกำหนดค่า Gravity ได้ดังนี้

Kotlin

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

Java

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

หากต้องการขยับตำแหน่งไปทางขวา ให้เพิ่มค่าของพารามิเตอร์ตัวที่ 2 หากต้องการขยับลง ให้เพิ่มค่าของพารามิเตอร์ตัวสุดท้าย

การสร้าง View ของข้อความโทสต์แบบกำหนดเอง

หากข้อความธรรมดาดูไม่ดีพอ คุณสร้างเลย์เอาต์ที่กำหนดเองสำหรับการแจ้งเตือนด้วยข้อความโทสต์ได้ โดยกำหนดเลย์เอาต์ View ใน XML หรือในโค้ดของแอปพลิเคชัน และส่งต่อออบเจ็กต์ View ของรูทไปยังเมธอด setView(View)

ข้อมูลโค้ดต่อไปนี้มีเลย์เอาต์ที่ปรับแต่งสำหรับการแจ้งเตือนด้วยข้อความโทสต์ (บันทึกเป็น 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>
    

โปรดสังเกตว่ารหัสขององค์ประกอบ LinearLayout คือ "custom_toast_container" คุณต้องใช้รหัสนี้และรหัสของไฟล์เลย์เอาต์ XML "custom_toast" เพื่อขยายเลย์เอาต์ดังที่แสดงด้านล่าง

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();
    

ก่อนอื่น ให้ดึง LayoutInflater มาด้วย getLayoutInflater() (หรือ getSystemService()) แล้วขยายเลย์เอาต์จาก XML โดยใช้ inflate(int, ViewGroup) พารามิเตอร์แรกคือรหัสทรัพยากรเลย์เอาต์และพารามิเตอร์ตัวที่ 2 คือ View ของรูท คุณใช้เลย์เอาต์ที่ขยายแล้วนี้เพื่อหาออบเจ็กต์ View อื่นๆ ในเลย์เอาต์ได้ ดังนั้นตอนนี้ให้บันทึกและกำหนดเนื้อหาสำหรับองค์ประกอบ ImageView และ TextView ขั้นตอนสุดท้าย ให้สร้าง Toast ใหม่ด้วย Toast(Context) และกำหนดคุณสมบัติบางอย่างของข้อความโทสต์ เช่น Gravity และระยะเวลา จากนั้นเรียก setView(View) และส่งต่อเลย์เอาต์ที่ขยายแล้วไปให้ ตอนนี้คุณจะแสดงข้อความโทสต์ด้วยเลย์เอาต์ที่กำหนดเองได้แล้วโดยเรียก show()

หมายเหตุ: อย่าใช้ตัวสร้างสาธารณะสำหรับ Toast เว้นแต่คุณจะกำหนดเลย์เอาต์ด้วย setView(View) หากไม่มีเลย์เอาต์แบบกำหนดเองที่จะใช้งาน คุณต้องใช้ makeText(Context, int, int) เพื่อสร้าง Toast