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

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

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

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

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

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

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

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

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

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

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

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

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