หากมีแอปแบบมุมมองอยู่แล้ว คุณอาจไม่ต้องการเขียน UI ทั้งหมดใหม่พร้อมกัน หน้านี้ช่วยให้คุณเพิ่มคอมโพเนนต์ Compose ใหม่ในแอปที่มีอยู่ หากต้องการเริ่มต้นใช้งาน Compose ในแอป โปรดดูตั้งค่า Compose สำหรับแอปที่มีอยู่
Jetpack Compose ได้รับการออกแบบให้ทำงานร่วมกับ View ได้ตั้งแต่เริ่มต้น ฟังก์ชันการทำงานนี้หมายความว่าคุณจะย้ายข้อมูลแอปที่อิงตามข้อมูลพร็อพเพอร์ตี้ที่มีอยู่ไปยัง Compose ได้ในขณะที่ยังสร้างฟีเจอร์ใหม่ๆ ได้ หากต้องการย้ายข้อมูลไปยัง Compose เราขอแนะนำให้ย้ายข้อมูลทีละส่วนโดยให้ Compose และ Views อยู่ร่วมกันในโค้ดเบสจนกว่าแอปของคุณจะเปลี่ยนไปใช้ Compose อย่างเต็มรูปแบบ
หากต้องการย้ายข้อมูลแอปไปยัง Compose ให้ทําตามขั้นตอนต่อไปนี้
- สร้างหน้าจอใหม่ด้วยเครื่องมือเขียน
- ขณะที่สร้างฟีเจอร์ ให้ระบุองค์ประกอบที่ใช้ซ้ำได้และเริ่มสร้างไลบรารีคอมโพเนนต์ UI ทั่วไป
- แทนที่ฟีเจอร์ที่มีอยู่ทีละหน้าจอ
สร้างหน้าจอใหม่ด้วยการเขียน
การใช้ Compose เพื่อสร้างฟีเจอร์ใหม่ซึ่งครอบคลุมทั้งหน้าจอเป็นวิธีที่ดีที่สุดในการกระตุ้นให้ผู้ใช้หันมาใช้ Compose การใช้กลยุทธ์นี้จะทำให้คุณสามารถเพิ่มฟีเจอร์และใช้ประโยชน์จากประโยชน์ของ Compose ในขณะที่ยังคงตอบสนองความต้องการทางธุรกิจของบริษัทได้
เมื่อใช้ Compose เพื่อสร้างหน้าจอใหม่ในแอปที่มีอยู่ คุณยังคงต้องทำงานภายใต้ข้อจำกัดของสถาปัตยกรรมของแอป หากคุณกำลังใช้ Fragment และคอมโพเนนต์การนำทาง คุณจะต้องสร้าง Fragment ใหม่และมีเนื้อหาใน Compose
หากต้องการใช้ Compose ใน Fregment ให้แสดงผล ComposeView
ในonCreateView()
เมธอดวงจรชีวิตของ Fregment ComposeView
มีเมธอด setContent()
ที่ใช้ระบุฟังก์ชัน Composable ได้
class NewFeatureFragment : Fragment() { override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View { return ComposeView(requireContext()).apply { setViewCompositionStrategy(ViewCompositionStrategy.DisposeOnViewTreeLifecycleDestroyed) setContent { NewFeatureScreen() } } } }
ดูข้อมูลเพิ่มเติมที่ ComposeView ใน Fragments
เพิ่มฟีเจอร์ใหม่ในหน้าจอที่มีอยู่
นอกจากนี้ คุณยังสามารถใช้ "เขียน" ในหน้าจอที่อิงตามมุมมองที่มีอยู่ได้ หากฟีเจอร์ใหม่ที่คุณกำลังเพิ่มเป็นส่วนหนึ่งของหน้าจอที่มีอยู่ โดยเพิ่ม 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
ได้ที่ API ความสามารถในการทำงานร่วมกัน
สร้างไลบรารีคอมโพเนนต์ UI ทั่วไป
ขณะที่สร้างฟีเจอร์ด้วยการเขียน คุณจะทราบได้อย่างรวดเร็วว่าท้ายที่สุดแล้วคุณก็จะได้สร้างไลบรารีคอมโพเนนต์ การสร้างไลบรารีคอมโพเนนต์ UI ทั่วไปช่วยให้คุณมีแหล่งข้อมูลที่เชื่อถือได้แหล่งเดียวสำหรับคอมโพเนนต์เหล่านี้ในแอปและส่งเสริมการนำมาใช้ซ้ำได้ แล้วฟีเจอร์ที่คุณสร้างจะขึ้นอยู่กับไลบรารีนี้ เทคนิคนี้จะเป็นประโยชน์อย่างยิ่งหากคุณกำลังสร้างระบบการออกแบบที่กำหนดเองใน Compose
ไลบรารีนี้อาจเป็นแพ็กเกจ โมดูล หรือโมดูลคลังแยกต่างหากก็ได้ ทั้งนี้ขึ้นอยู่กับขนาดของแอป ดูข้อมูลเพิ่มเติมเกี่ยวกับการจัดระเบียบโมดูลในแอปได้ในคู่มือการแยกโมดูลแอป Android
แทนที่ฟีเจอร์ที่มีอยู่ด้วยการเขียน
นอกเหนือจากการใช้ Compose เพื่อสร้างฟีเจอร์ใหม่แล้ว คุณควรค่อยๆ ย้ายฟีเจอร์ที่มีอยู่ในแอปเพื่อใช้ประโยชน์จาก Compose
การกำหนดให้แอปเป็นแบบ Compose เท่านั้นจะช่วยเร่งการพัฒนาและลดขนาด APK และเวลาบิลด์ของแอปอีกด้วย ดูเปรียบเทียบประสิทธิภาพของการเขียนและการดูเพื่อดูข้อมูลเพิ่มเติม
หน้าจอที่เรียบง่าย
ที่แรกที่ต้องพิจารณาเมื่อย้ายฟีเจอร์ที่มีอยู่ไปยัง 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 สามารถเขียนใหม่ได้ใน Compose ภายใน 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 วิธีนี้เรียกอีกอย่างหนึ่งว่าแนวทางจากล่างขึ้นบน
การนำคอมโพเนนต์การนําทางและเศษข้อมูลออก
คุณจะย้ายข้อมูลไปยังการเขียนการนำทางได้เมื่อสามารถนำ Fragment ทั้งหมดออกและแทนที่ด้วย Composable ระดับหน้าจอที่สอดคล้องกัน Composable ระดับหน้าจอสามารถมีทั้งการเขียนและการดูเนื้อหา แต่ปลายทางของการนำทางทั้งหมดต้องเป็น Composable เพื่อเปิดใช้การย้ายข้อมูลการเขียนการนำทาง ในระหว่างนี้ คุณควรใช้คอมโพเนนต์การนําทางที่อิงตาม Fragment ในโค้ดเบสแบบผสมของ View และ Compose ต่อไป ดูข้อมูลเพิ่มเติมได้ที่ย้ายข้อมูลการไปยังส่วนต่างๆ ของ Jetpack ไปยัง Navigation Compose
แหล่งข้อมูลเพิ่มเติม
ดูแหล่งข้อมูลเพิ่มเติมต่อไปนี้เพื่อดูข้อมูลเพิ่มเติมเกี่ยวกับการย้ายข้อมูลแอปที่อิงตามข้อมูลพร็อพเพอร์ตี้ที่มีอยู่ไปยัง Compose
- Codelab
- การย้ายข้อมูลไปยัง Jetpack Compose: ดูวิธีย้ายข้อมูลบางส่วนของแอป Sunflower ไปยัง Compose ใน Codelab นี้
- บล็อกโพสต์
- การย้ายข้อมูล Sunflower ไปยัง Jetpack Compose: ดูวิธีย้ายข้อมูล Sunflower ไปยัง Compose โดยใช้กลยุทธ์ที่อธิบายไว้ในหน้านี้
- การทำงานร่วมกันของ Jetpack Compose: การใช้ Compose ใน RecyclerView:
ดูวิธีใช้ Compose ใน
RecyclerView
อย่างมีประสิทธิภาพ
ขั้นตอนถัดไป
เมื่อทราบกลยุทธ์ที่คุณสามารถนำไปใช้ในการย้ายข้อมูลแอปที่อิงตามการดูที่มีอยู่แล้ว ลองสำรวจ API ความสามารถในการทำงานร่วมกันเพื่อดูข้อมูลเพิ่มเติม
แนะนำสำหรับคุณ
- หมายเหตุ: ข้อความลิงก์จะแสดงเมื่อ JavaScript ปิดอยู่
- การใช้ "เขียน" ใน View
- เลื่อน
- ย้ายข้อมูล
RecyclerView
ไปยังรายการแบบ Lazy Loading