หากมีแอปที่ทำงานบน View อยู่แล้ว คุณอาจไม่ต้องการเขียน UI ทั้งหมดใหม่พร้อมกัน หน้านี้จะช่วยคุณเพิ่มคอมโพเนนต์ Compose ใหม่ลงในแอปที่มีอยู่ หากต้องการเริ่มต้นใช้งาน Compose ในแอป โปรดดูตั้งค่า Compose สำหรับแอปที่มีอยู่
Jetpack Compose ได้รับการออกแบบให้ทำงานร่วมกับ View ได้ตั้งแต่เริ่มต้น ฟังก์ชันการทำงานนี้ช่วยให้คุณย้ายข้อมูลแอปเดิมที่อิงตามมุมมองไปยัง Compose ได้ในขณะที่ยังสร้างฟีเจอร์ใหม่ๆ ได้อยู่ หากต้องการย้ายข้อมูลไปยัง Compose เราขอแนะนำให้ย้ายข้อมูลทีละส่วนโดยให้ Compose และ Views อยู่ร่วมกันในโค้ดเบสจนกว่าแอปของคุณจะเปลี่ยนไปใช้ Compose อย่างเต็มรูปแบบ
หากต้องการย้ายข้อมูลแอปไปยัง Compose ให้ทําตามขั้นตอนต่อไปนี้
- สร้างหน้าจอใหม่ด้วยเครื่องมือเขียน
- ขณะสร้างฟีเจอร์ ให้ระบุองค์ประกอบที่นํากลับมาใช้ซ้ำได้ และเริ่มสร้างคลังคอมโพเนนต์ UI ทั่วไป
- แทนที่ฟีเจอร์ที่มีอยู่ทีละหน้าจอ
สร้างหน้าจอใหม่ด้วยเครื่องมือเขียน
การใช้ Compose เพื่อสร้างฟีเจอร์ใหม่ซึ่งครอบคลุมทั้งหน้าจอเป็นวิธีที่ดีที่สุดในการกระตุ้นให้ผู้ใช้หันมาใช้ Compose กลยุทธ์นี้จะช่วยให้คุณเพิ่มฟีเจอร์และใช้ประโยชน์จากประโยชน์ของ Compose ได้ ในขณะที่ยังคงตอบสนองความต้องการทางธุรกิจของบริษัท
เมื่อใช้ Compose เพื่อสร้างหน้าจอใหม่ในแอปที่มีอยู่ คุณยังคงต้องทำงานภายใต้ข้อจำกัดของสถาปัตยกรรมของแอป หากใช้ส่วนย่อยและคอมโพเนนต์การนําทาง คุณจะต้องสร้างส่วนย่อยใหม่และมีเนื้อหาในส่วนคอมโพสิท
หากต้องการใช้ Compose ใน Fregment ให้แสดงผล ComposeView
ในonCreateView()
เมธอดวงจรชีวิตของ Fregment ComposeView
มีวิธี
setContent()
ที่คุณระบุฟังก์ชันคอมโพสิเบิลได้
class NewFeatureFragment : Fragment() { override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View { return ComposeView(requireContext()).apply { setViewCompositionStrategy(ViewCompositionStrategy.DisposeOnViewTreeLifecycleDestroyed) setContent { NewFeatureScreen() } } } }
ดูข้อมูลเพิ่มเติมที่ ComposeView ใน Fregment
เพิ่มฟีเจอร์ใหม่ในหน้าจอที่มีอยู่
นอกจากนี้ คุณยังใช้ "เขียน" ในหน้าจอที่อิงตามมุมมองที่มีอยู่ได้หากฟีเจอร์ใหม่ที่เพิ่มเป็นส่วนหนึ่งของหน้าจอที่มีอยู่ โดยเพิ่ม ComposeView
ลงในลําดับชั้นของมุมมอง เช่นเดียวกับมุมมองอื่นๆ
เช่น สมมติว่าคุณต้องการเพิ่มมุมมองย่อยลงใน LinearLayout
โดยทําใน XML ดังนี้
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:id="@+id/text" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <androidx.compose.ui.platform.ComposeView android:id="@+id/compose_view" android:layout_width="match_parent" android:layout_height="match_parent" /> </LinearLayout>
เมื่อขยายมุมมองแล้ว คุณจะอ้างอิง ComposeView
ในลําดับชั้นและเรียกใช้ setContent()
ในภายหลังได้
ดูข้อมูลเพิ่มเติมเกี่ยวกับ ComposeView
ได้ที่ Interoperability API
สร้างไลบรารีคอมโพเนนต์ UI ที่ใช้กันทั่วไป
เมื่อสร้างฟีเจอร์ด้วย Compose คุณจะพบว่าคุณกำลังสร้างคลังคอมโพเนนต์ การสร้างไลบรารีคอมโพเนนต์ UI ทั่วไปจะช่วยให้คุณมีแหล่งข้อมูลที่เชื่อถือได้เพียงแหล่งเดียวสําหรับคอมโพเนนต์เหล่านี้ในแอปและส่งเสริมการนำกลับมาใช้ซ้ำ จากนั้นฟีเจอร์ที่คุณสร้างจะขึ้นอยู่กับไลบรารีนี้ เทคนิคนี้มีประโยชน์อย่างยิ่งหากคุณกำลังสร้างระบบการออกแบบที่กำหนดเองใน Compose
ไลบรารีนี้อาจเป็นแพ็กเกจ โมดูล หรือโมดูลไลบรารีแยกต่างหาก ทั้งนี้ขึ้นอยู่กับขนาดของแอป ดูข้อมูลเพิ่มเติมเกี่ยวกับการจัดระเบียบโมดูลในแอปได้ที่คู่มือการจัดโมดูลของแอป Android
แทนที่ฟีเจอร์ที่มีอยู่ด้วย Compose
นอกจากการใช้ Compose เพื่อสร้างฟีเจอร์ใหม่แล้ว คุณยังควรย้ายข้อมูลฟีเจอร์ที่มีอยู่ในแอปทีละน้อยเพื่อใช้ประโยชน์จาก Compose
การใช้ Compose เท่านั้นจะช่วยให้การพัฒนาแอปเร็วขึ้น รวมถึงช่วยลดขนาด APK และเวลาสร้างแอปด้วย ดูข้อมูลเพิ่มเติมที่เปรียบเทียบประสิทธิภาพของ Compose กับ View
หน้าจอแบบง่าย
สิ่งแรกที่ควรดูเมื่อย้ายข้อมูลฟีเจอร์ที่มีอยู่ไปยัง Compose คือหน้าจอแบบง่าย หน้าจอแบบง่ายอาจเป็นหน้าจอต้อนรับ หน้าจอยืนยัน หรือหน้าจอการตั้งค่าที่ข้อมูลใน UI ค่อนข้างคงที่
มาดูไฟล์ XML ต่อไปนี้
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:id="@+id/title_text" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/title" android:textAppearance="?attr/textAppearanceHeadline2" /> <TextView android:id="@+id/subtitle_text" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/subtitle" android:textAppearance="?attr/textAppearanceHeadline6" /> <TextView android:id="@+id/body_text" android:layout_width="wrap_content" android:layout_height="0dp" android:layout_weight="1" android:text="@string/body" android:textAppearance="?attr/textAppearanceBody1" /> <Button android:id="@+id/confirm_button" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="@string/confirm"/> </LinearLayout>
คุณสามารถเขียนไฟล์ XML ใหม่ในเครื่องมือเขียนได้ 2-3 บรรทัดดังนี้
@Composable fun SimpleScreen() { Column(Modifier.fillMaxSize()) { Text( text = stringResource(R.string.title), style = MaterialTheme.typography.headlineMedium ) Text( text = stringResource(R.string.subtitle), style = MaterialTheme.typography.headlineSmall ) Text( text = stringResource(R.string.body), style = MaterialTheme.typography.bodyMedium ) Spacer(modifier = Modifier.weight(1f)) Button(onClick = { /* Handle click */ }, Modifier.fillMaxWidth()) { Text(text = stringResource(R.string.confirm)) } } }
หน้าจอมุมมองแบบผสมและเขียน
หน้าจอที่มีโค้ด Compose อยู่แล้วเป็นอีกตัวเลือกที่ดีสำหรับการย้ายข้อมูลไปยัง Compose โดยสมบูรณ์ คุณสามารถย้ายข้อมูลหน้าจอทั้งหมดไปยัง Compose หรือย้ายทีละส่วนก็ได้ ทั้งนี้ขึ้นอยู่กับความซับซ้อนของหน้าจอ หากหน้าจอเริ่มต้นด้วย Compose ในซับต้นไม้ของลําดับชั้น UI คุณจะต้องย้ายข้อมูลองค์ประกอบ UI ต่อไปจนกว่าทั้งหน้าจอจะอยู่ใน Compose แนวทางนี้เรียกอีกอย่างว่าแนวทางจากล่างขึ้นบน
การนำคอมโพเนนต์ Frgament และ Navigation ออก
คุณสามารถย้ายข้อมูลไปยัง Navigation Compose เมื่อนำ Fragment ทั้งหมดออกแล้วแทนที่ด้วยคอมโพสิเบิลระดับหน้าจอที่เกี่ยวข้อง คอมโพสิเบิลระดับหน้าจออาจมีเนื้อหาแบบผสมผสานระหว่างคอมโพสิเบิลและมุมมอง แต่ปลายทางการนำทางทั้งหมดต้องเป็นคอมโพสิเบิลเพื่อเปิดใช้การย้ายข้อมูลคอมโพสิเบิลการนำทาง ในระหว่างนี้ คุณควรใช้คอมโพเนนต์การนําทางที่อิงตาม Fragment ในโค้ดเบสแบบผสมของ View และ Compose ต่อไป ดูข้อมูลเพิ่มเติมได้ที่ย้ายข้อมูลการไปยังส่วนต่างๆ ของ Jetpack ไปยัง Navigation Compose
แหล่งข้อมูลเพิ่มเติม
ดูแหล่งข้อมูลเพิ่มเติมต่อไปนี้เพื่อดูข้อมูลเพิ่มเติมเกี่ยวกับการย้ายข้อมูลแอปเดิมที่อิงตามมุมมองไปยัง Compose
- Codelab
- การย้ายข้อมูลไปยัง Jetpack Compose: ดูวิธีย้ายข้อมูลบางส่วนของแอป Sunflower ไปยัง Compose ใน Codelab นี้
- บล็อกโพสต์
- การย้ายข้อมูล Sunflower ไปยัง Jetpack Compose: ดูวิธีย้ายข้อมูล Sunflower ไปยัง Compose โดยใช้กลยุทธ์ที่อธิบายไว้ในหน้านี้
- การทำงานร่วมกันของ Jetpack Compose: การใช้ Compose ใน RecyclerView:
ดูวิธีใช้ Compose ใน
RecyclerView
อย่างมีประสิทธิภาพ
ขั้นตอนถัดไป
เมื่อทราบกลยุทธ์ในการย้ายข้อมูลแอปที่อิงตามมุมมองที่มีอยู่แล้ว โปรดดูข้อมูลเพิ่มเติมใน Interoperability API
แนะนำสำหรับคุณ
- หมายเหตุ: ข้อความลิงก์จะแสดงเมื่อ JavaScript ปิดอยู่
- การใช้เครื่องมือเขียนในมุมมอง
- เลื่อน
- ย้ายข้อมูล
RecyclerView
ไปยังรายการแบบ Lazy