ภาพสไลด์

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

ภาพสไลด์มีเลย์เอาต์ 4 แบบให้เลือกให้เหมาะกับกรณีการใช้งานที่แตกต่างกัน ดังนี้

  • เรียกดูหลายรายการ: รวมสินค้าที่มีขนาดต่างกัน แนะนำสำหรับการเรียกดูรายการต่างๆ พร้อมกัน เช่น รูปภาพ
  • ไม่ได้อยู่ในกล่อง: มีรายการที่มีขนาดเดียวและยื่นออกไปนอกขอบหน้าจอ สามารถปรับแต่งให้แสดงข้อความหรือ UI อื่นๆ เพิ่มเติมเหนือหรือใต้แต่ละรายการได้
  • ภาพหลัก: ไฮไลต์รูปภาพขนาดใหญ่รูปเดียวเพื่อดึงดูดความสนใจ และแสดงตัวอย่างสิ่งที่จะตามมาด้วยรูปภาพขนาดเล็ก แนะนำให้ใช้เพื่อไฮไลต์เนื้อหาที่ต้องการเน้น เช่น ภาพปกภาพยนตร์หรือรายการ
  • เต็มหน้าจอ: แสดงรายการขนาดใหญ่แบบเต็มหน้าจอทีละรายการและเลื่อนขึ้นลงตามแนวตั้ง เหมาะสำหรับเนื้อหาที่มีความสูงมากกว่าความกว้าง
ภาพสไลด์แบบไม่จำกัดพื้นที่และแบบเต็มหน้าจอที่แสดงอยู่ข้างๆ กัน ประเภทภาพสไลด์แบบไม่จำกัดมีรายการภาพสไลด์หลายรายการ ส่วนแบบเต็มหน้าจอจะมีรายการเดียวที่แสดงเต็มหน้าจอ
รูปที่ 1 ภาพสไลด์แบบไม่มีกรอบ (1) และแบบเต็มหน้าจอ (2)

หน้านี้จะแสดงวิธีใช้เลย์เอาต์ภาพสไลด์แบบเรียกดูหลายรายการและแบบไม่มีคอนเทนเนอร์ ดูข้อมูลเพิ่มเติมเกี่ยวกับประเภทเลย์เอาต์ได้ในหลักเกณฑ์ของภาพสไลด์ Material 3

แพลตฟอร์ม API

หากต้องการใช้ภาพสไลด์แบบเรียกดูหลายรายการและแบบไม่มีคอนเทนเนอร์ ให้ใช้คอมโพสิเบิล HorizontalMultiBrowseCarousel และ HorizontalUncontainedCarousel คอมโพสิเบิลเหล่านี้ใช้พารามิเตอร์หลักต่อไปนี้ร่วมกัน

  • state: อินสแตนซ์ CarouselState ที่จัดการดัชนีรายการปัจจุบันและตําแหน่งการเลื่อน สร้างสถานะนี้โดยใช้ rememberCarouselState { itemCount } โดยที่ itemCount คือจํานวนรายการทั้งหมดในภาพสไลด์
  • itemSpacing: กําหนดขนาดของพื้นที่ว่างระหว่างรายการที่อยู่ติดกันในภาพสไลด์
  • contentPadding: ใช้ระยะห่างจากขอบรอบๆ พื้นที่เนื้อหาของภาพสไลด์ ใช้ตัวเลือกนี้เพื่อเพิ่มเว้นวรรคก่อนรายการแรกหรือหลังรายการสุดท้าย หรือเพื่อกำหนดระยะขอบสำหรับรายการภายในส่วนที่เลื่อนได้
  • content: ฟังก์ชันที่ประกอบกันได้ซึ่งรับอินเด็กซ์จำนวนเต็ม ใช้แลมดานี้เพื่อกำหนด UI สำหรับแต่ละรายการในภาพสไลด์ตามดัชนีของรายการ

คอมโพสิเบิลเหล่านี้ระบุขนาดของรายการแตกต่างกันดังนี้

  • itemWidth (สำหรับ HorizontalUncontainedCarousel): ระบุความกว้างที่แน่นอนของแต่ละรายการในภาพสไลด์แบบไม่จำกัด
  • preferredItemWidth (สำหรับ HorizontalMultiBrowseCarousel): แนะนำความกว้างที่เหมาะสมสำหรับรายการในภาพสไลด์แบบเรียกดูหลายรายการ ซึ่งช่วยให้คอมโพเนนต์แสดงรายการได้หลายรายการหากมีพื้นที่เพียงพอ

ตัวอย่าง: ภาพสไลด์แบบเรียกดูหลายรายการ

ข้อมูลโค้ดนี้ใช้ภาพสไลด์แบบเรียกดูหลายรายการ

ประเด็นสำคัญเกี่ยวกับรหัส

  • กำหนดคลาสข้อมูล CarouselItem ซึ่งจัดโครงสร้างข้อมูลสำหรับองค์ประกอบแต่ละรายการในภาพสไลด์
  • สร้างและจดจำListของออบเจ็กต์ CarouselItem ที่สร้างขึ้นด้วยแหล่งข้อมูลรูปภาพและคําอธิบาย
  • ใช้คอมโพสิเบิล HorizontalMultiBrowseCarousel ซึ่งออกแบบมาเพื่อแสดงรายการหลายรายการในภาพสไลด์
    • ระบบจะเริ่มต้นสถานะของภาพสไลด์โดยใช้ rememberCarouselState ซึ่งได้รับจำนวนรายการทั้งหมด
    • รายการมี preferredItemWidth (ในที่นี้คือ 186.dp) ซึ่งจะแนะนำความกว้างที่เหมาะสมสำหรับแต่ละรายการ ภาพสไลด์จะใช้ข้อมูลนี้เพื่อกำหนดจำนวนรายการที่แสดงบนหน้าจอได้พร้อมกัน
    • พารามิเตอร์ itemSpacing จะเพิ่มช่องว่างเล็กๆ ระหว่างรายการ
    • Lambda ต่อท้ายของ HorizontalMultiBrowseCarousel จะวนผ่าน CarouselItems ในการวนซ้ำแต่ละครั้ง ระบบจะดึงข้อมูลรายการที่อินเด็กซ์ i และแสดงผลคอมโพสิชัน Image สำหรับรายการนั้น
    • Modifier.maskClip(MaterialTheme.shapes.extraLarge) ใช้มาสก์รูปทรงที่กำหนดไว้ล่วงหน้ากับรูปภาพแต่ละรูป ทำให้รูปภาพมีมุมมน
    • contentDescription มีคำอธิบายการช่วยเหลือพิเศษสำหรับรูปภาพ

ผลลัพธ์

รูปภาพต่อไปนี้แสดงผลลัพธ์จากข้อมูลโค้ดก่อนหน้า

ภาพสไลด์แบบเรียกดูหลายรายการที่มีรูปภาพ 3 รูป โดยรูปภาพ 2 รูปแสดงอย่างเต็มรูปแบบและอีก 1 รูปแสดงเพียงบางส่วน
รูปที่ 2 ภาพสไลด์แบบเรียกดูหลายรายการโดยมีการคลิปรายการล่าสุด

ตัวอย่างภาพสไลด์ที่ไม่มีคอนเทนเนอร์

ข้อมูลโค้ดต่อไปนี้ใช้ภาพสไลด์ที่ไม่มีคอนเทนเนอร์

ประเด็นสำคัญเกี่ยวกับรหัส

  • คอมโพสิชัน HorizontalUncontainedCarousel จะสร้างเลย์เอาต์ภาพสไลด์
    • พารามิเตอร์ itemWidth จะกำหนดความกว้างคงที่สำหรับแต่ละรายการในภาพสไลด์

ผลลัพธ์

รูปภาพต่อไปนี้แสดงผลลัพธ์จากข้อมูลโค้ดก่อนหน้า

ภาพสไลด์แบบไม่มีคอนเทนเนอร์ซึ่งมี 3 รายการ รายการสุดท้ายมองเห็นได้เพียงบางส่วน แต่ไม่ได้ถูกตัด
รูปที่ 3 ภาพสไลด์ที่ไม่มีขอบเขต ซึ่งไม่ตัดรายการสุดท้ายในภาพสไลด์