รูปแบบเทียบกับตัวแก้ไข

สไตล์จะแตกต่างจากตัวแก้ไขโดยการออกแบบ สไตล์ไม่ได้แทนที่ตัวแก้ไข แต่ทั้ง 2 ระบบจะทำงานร่วมกันโดยมีเป้าหมายที่แตกต่างกัน ภายในแล้ว สไตล์คือตัวแก้ไข คุณสามารถทำทุกอย่างที่รูปแบบทำได้ด้วยตัวแก้ไข แต่ฟังก์ชันการทำงานบางอย่างในตัวแก้ไขจะใช้ในรูปแบบไม่ได้

ต่อไปนี้คือการเปรียบเทียบระหว่างสไตล์กับตัวแก้ไข

ฟีเจอร์ คีย์ตัวปรับแต่ง รูปแบบ
เป้าหมายหลัก กำหนดลักษณะการทำงาน ความหมาย และเลย์เอาต์ที่ซับซ้อน ตัวแก้ไขจะจัดการองค์ประกอบแต่ละรายการได้ทันทีสำหรับ Composable ที่เฉพาะเจาะจง และจะไม่ส่งต่อจากธีม กำหนดลักษณะที่ปรากฏ ขนาดของแต่ละรายการ และพร็อพเพอร์ตี้ที่กำหนดธีมได้ สไตล์จะทำงานที่ระดับธีมและเขียนทับได้ที่ระดับคอมโพเนนต์ โดยจะส่งต่อและใช้สไตล์กับ Composable ต่างๆ
Logic การบวก - ตัวแก้ไขจะรวมกันเพื่อสร้างผลลัพธ์ใหม่ เขียนทับได้ - คุณสมบัติสุดท้ายที่ตั้งค่าในสไตล์จะเป็นค่าที่ใช้ สไตล์ทําหน้าที่เป็นเลเยอร์เดียวของพร็อพเพอร์ตี้ที่ลบล้างกันตามลําดับชั้นของลำดับความสำคัญที่กําหนดไว้
การกำหนดธีม ยากที่จะยกระดับให้เป็นธีม โดยปกติจะใช้แยกกัน โดยการออกแบบแล้ว สไตล์สามารถใช้ธีมได้ (เข้าถึง CompositionLocal ได้) และกำหนดได้ครั้งเดียวและใช้ในคอมโพเนนต์ต่างๆ ได้
ประสิทธิภาพ การอัปเดตมักต้องใช้ทั้ง 3 เฟสของ Compose ได้แก่ การจัดองค์ประกอบ เลย์เอาต์ และการวาด การทำให้ตัวแก้ไขมีประสิทธิภาพการเคลื่อนไหวที่ดีมักต้องเขียนเวอร์ชันที่ใช้ Lambda ข้ามเฟสการจัดองค์ประกอบ โดยจะใช้งานได้เฉพาะในเฟสเลย์เอาต์และการวาดเท่านั้น ซึ่งจะช่วยลดการจัดองค์ประกอบใหม่ ต้องจัดสรรออบเจ็กต์น้อยลง
ภาพเคลื่อนไหว ต้องใช้ภาพเคลื่อนไหวแบบแยกต่างหาก เช่น animate*AsState ฟีเจอร์ใน animate { } API ที่จัดการภาพเคลื่อนไหวบางอย่างให้คุณ

ข้อจำกัดของตัวแก้ไข

ตัวแก้ไขมีประโยชน์มากมายในสภาพแวดล้อม Compose ปัจจุบัน อย่างไรก็ตาม สไตล์ ช่วยแก้ปัญหาข้อจำกัดบางอย่างของตัวแก้ไข ซึ่งรายการต่อไปนี้จะอธิบายถึงข้อจำกัดเหล่านั้น

  • โดยปกติแล้ว ระบบจะสร้างตัวแก้ไขในระยะการแต่ง การอัปเดตอาจบังคับให้ เรียกใช้การจัดองค์ประกอบ เลย์เอาต์ และการวาดซ้ำทั้งหมด แม้ว่าจะเป็นการเปลี่ยนแปลงภาพเล็กๆ น้อยๆ เช่น สี เว้นแต่คุณจะสร้างตัวแก้ไขที่อิงตาม Lambda
  • ตัวแก้ไขแบบมีเงื่อนไขต้องใช้ตรรกะ if-else ที่ขัดขวางภายในเชนที่ลื่นไหล การเคลื่อนไหวต้องใช้บอยเลอร์เพลตสถานะด้วยตนเองและไม่มีกลไก "เคลื่อนไหวอัตโนมัติ" ที่มีประสิทธิภาพสูง
  • ตัวปรับจะซ้อนกันแทนที่จะแทนที่ คุณลบล้างเส้นขอบเริ่มต้นของคอมโพเนนต์ไม่ได้ ทำได้เพียงวาดเส้นขอบที่ 2 ทับลงไป
  • การดัดแปลงนั้นยากที่จะสรุปเป็นธีมระดับโลก ดังนั้น ธีม มักจะจัดเก็บค่าดิบแทนการกําหนดค่าตัวแก้ไขที่นํากลับมาใช้ใหม่ได้

ข้อจำกัดของสไตล์

แม้ว่าสไตล์จะช่วยเติมเต็มช่องว่างบางอย่างที่ตัวแก้ไขมี แต่ก็มี ข้อจำกัดบางประการ ซึ่งแสดงให้เห็นว่าสไตล์ไม่สามารถแทนที่ตัวแก้ไขได้อย่างสมบูรณ์

  • สไตล์คือตัวแก้ไขเฉพาะทาง แม้ว่าตัวแก้ไขจะทำทุกอย่างที่สไตล์ ทำได้ แต่สไตล์จะทำทุกอย่างที่ตัวแก้ไขทำได้ไม่ได้ ดังนั้น สไตล์จึงสามารถเสริมตัวแก้ไขได้ แต่ ไม่สามารถแทนที่ตัวแก้ไขได้
  • สไตล์จะจำกัดอยู่แค่การกำหนดค่าภาพ (พื้นหลัง ระยะห่างจากขอบ เส้นขอบ) โดยจะจัดการลักษณะการทำงาน เช่น ตรรกะการคลิก การตรวจหาท่าทางสัมผัส หรือความหมายของ การช่วยเหลือพิเศษไม่ได้
  • การเปลี่ยนสไตล์ให้เป็นสถานะสุดท้ายมีค่าใช้จ่ายมากกว่าการใช้ตัวแก้ไขเดียว ระบบต้องสร้างโครงสร้างข้อมูลที่มีค่าพร็อพเพอร์ตี้ที่เป็นไปได้ทั้งหมด และการค้นหาพร็อพเพอร์ตี้ที่รับค่ามาจะทำให้กระบวนการนี้ซับซ้อนยิ่งขึ้น

กรณีที่ควรใช้สไตล์แทนตัวแก้ไข

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

  • เพื่อให้ธีมมีความสอดคล้องกัน ระบบออกแบบสไตล์ให้ "ยก" ไปไว้ในธีมส่วนกลาง แทนที่จะส่งตัวแก้ไขที่ซ้ำกันไปยังทุกคอมโพเนนต์ คุณสามารถกำหนดสไตล์เดียวในธีมเพื่อสร้างรูปลักษณ์ที่สอดคล้องกัน ทั่วทั้งแอปได้
  • เมื่อทำการเคลื่อนไหวบ่อยๆ: สไตล์จะได้รับการประเมินในระหว่างเลย์เอาต์ และเฟสการวาด ซึ่งช่วยให้คุณสมบัติต่างๆ เช่น สีหรือสเกล เคลื่อนไหวได้ในขณะที่ ข้ามเฟสการคอมโพสิตไปทั้งหมด ซึ่งจะช่วยลดค่าใช้จ่ายด้านประสิทธิภาพได้อย่างมาก ใช้สไตล์แทนตัวแก้ไขเมื่อสร้างภาพเคลื่อนไหวของพร็อพเพอร์ตี้ภาพ
  • การลบล้างเทียบกับการซ้อนทับ: ใช้สไตล์เมื่อต้องการแทนที่พร็อพเพอร์ตี้เริ่มต้น ตัวแก้ไขจะเพิ่มค่า (การเพิ่มเส้นขอบจะซ้อนเส้นขอบที่ 2) ในขณะที่สไตล์จะใช้ตรรกะ "การเขียนครั้งสุดท้ายชนะ" ซึ่งทำให้สลับพื้นหลังหรือระยะห่างได้ง่ายขึ้นโดยไม่ทำให้ภาพรก
  • การปรับแต่งคอมโพเนนต์ Material: หากคอมโพเนนต์ Material มีพารามิเตอร์ Style เราขอแนะนำให้ใช้แนวทางนี้ในการปรับแต่ง สไตล์เหล่านี้ช่วยให้คุณเข้าถึงและแก้ไขพร็อพเพอร์ตี้ที่เฉพาะเจาะจงภายในโครงสร้างภายในของ Composable ซึ่งอาจเข้าถึงไม่ได้ในกรณีอื่น