اگر برنامه مبتنی بر View موجودی دارید، ممکن است نخواهید کل میانای کاربر آن را یکباره بازنویسی کنید. این صفحه به شما کمک میکند مؤلفههای جدید Compose را به برنامه موجودتان اضافه کنید. برای شروع استفاده از Compose در برنامهتان، راهاندازی Compose برای برنامه موجود را ببینید.
Jetpack Compose از همان ابتدا با همکنشپذیری View طراحی شده است. این عملکرد به این معنی است که میتوانید برنامه مبتنی بر View موجود خود را به Compose منتقل کنید درحالیکه همچنان میتوانید ویژگیهای جدید بسازید. برای انتقال به Compose، انتقال افزایشی را توصیه میکنیم که در آن Compose و Views در پایگاه کد شما همزیستی دارند تا زمانی که برنامهتان کاملاً در Compose قرار گیرد.
برای انتقال برنامهتان به Compose، این مراحل را دنبال کنید:
- ساختن صفحههای جدید با Compose.
- همانطور که ویژگیها را میسازید، عناصر قابلاستفاده مجدد را شناسایی کنید و شروع به ایجاد کتابخانهای از مؤلفههای رایج رابط کاربری کنید.
- ویژگیهای موجود را یکییکی جایگزین کنید.
ساختن صفحههای جدید با Compose
استفاده از Compose برای ساختن ویژگیهای جدیدی که کل صفحه را دربرمیگیرد بهترین راه برای سوق دادن شما به استفاده از Compose است. با این راهبرد، میتوانید ویژگیهایی را اضافه کنید و از مزایای Compose بهرهمند شوید، درحالیکه همچنان نیازهای کسبوکار شرکتتان را برآورده میکنید.
وقتی از Compose برای ساختن صفحههای جدید در برنامه موجودتان استفاده میکنید، همچنان تحت محدودیتهای معماری برنامهتان کار میکنید. اگر از «قطعهها» و مؤلفه «پیمایش» استفاده میکنید، باید «قطعه» جدیدی ایجاد کنید و محتوای آن را در Compose قرار دهید.
برای استفاده از Compose در Fragment، یک ComposeView را در
روش چرخه حیات onCreateView() Fragment خود برگردانید. 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 در Fragments را ببینید.
افزودن ویژگیهای جدید در صفحههای موجود
اگر ویژگی جدیدی که اضافه میکنید بخشی از صفحهنمایش موجود باشد، میتوانید از Compose در صفحهنمایش مبتنی بر View موجود نیز استفاده کنید. برای انجام این کار، یک ComposeView به
سلسلهمراتب View اضافه کنید، درست مانند هر View دیگری.
برای مثال، فرض کنید میخواهید نمای فرزند را به 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، میاناهای برنامهسازی کاربردی همکنشپذیری را بررسی کنید.
ساختن کتابخانهای از مؤلفههای رایج واسط کاربر
As you’re building features with Compose, you’ll quickly realize that you end up building a library of components. ایجاد کتابخانهای از مؤلفههای واسط کاربر مشترک به شما امکان میدهد منبع واحدی از حقیقت برای این مؤلفهها در برنامهتان داشته باشید و قابلیت استفاده مجدد را ارتقا دهید. ویژگیهایی که میسازید میتوانند به این کتابخانه وابسته باشند. این تکنیک بهویژه زمانی مفید است که درحال ساختن سیستم طراحی سفارشی در Compose باشید.
بسته به اندازه برنامهتان، این کتابخانه میتواند بسته، پیمانه، یا پیمانه کتابخانه جداگانهای باشد. برای اطلاعات بیشتر درباره سازماندهی کردن ماژولها در برنامهتان، راهنمای مدولارسازی برنامه Android را بررسی کنید.
جایگزین کردن ویژگیهای موجود با Compose
علاوهبر استفاده از Compose برای ساختن ویژگیهای جدید، باید بهتدریج ویژگیهای موجود در برنامهتان را انتقال دهید تا از Compose بهره ببرید.
اگر برنامهتان فقط Compose باشد، میتواند توسعه را تسریع کند و همچنین اندازه APK و زمان ساخت برنامهتان را کاهش دهد. برای کسب اطلاعات بیشتر، به مقایسه عملکرد Compose و View مراجعه کنید.
صفحههای ساده
اولین جاهایی که باید هنگام انتقال ویژگیهای موجود به Compose بررسی شوند، صفحههای ساده هستند. صفحههای ساده میتوانند صفحه خوشامدگویی، صفحه تأیید، یا صفحه تنظیمات باشند که در آنها دادههای نمایشدادهشده در واسط کاربر نسبتاً ثابت است.
فایل 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 در چند خط بازنویسی کرد:
@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 منتقل کنید یا این کار را قطعهبهقطعه انجام دهید. اگر صفحه با Compose در زیردرختی از سلسلهمراتب میانای کاربر شروع شده باشد، انتقال عناصر میانای کاربر را تا زمانی که کل صفحه در Compose قرار گیرد ادامه میدهید. به این رویکرد، رویکرد پایین به بالا نیز گفته میشود.
درحال برداشتن قطعهها و مؤلفه پیمایش
وقتی توانستید همه Fragmentها را بردارید و آنها را با composableهای سطح صفحهنمایش مربوطه جایگزین کنید، میتوانید به Navigation Compose منتقل شوید. ترکیبشدنیهای سطح صفحهنمایش میتوانند حاوی ترکیبی از محتوای Compose و View باشند، اما همه مقصدهای پیمایش باید ترکیبشدنی باشند تا انتقال Navigation Compose امکانپذیر شود. تا آن زمان، باید به استفاده از مؤلفه «پیمایش» مبتنی بر Fragment در پایگاه کد ترکیبی View و Compose ادامه دهید. برای اطلاعات بیشتر، به انتقال Jetpack Navigation به Navigation Compose مراجعه کنید.
منابع بیشتر
برای کسب اطلاعات بیشتر درباره انتقال برنامه مبتنی بر View موجود به Compose، منابع اضافی زیر را بررسی کنید:
- محکزنیهای قهرمان: مقایسههای محکزنی واقعی بین Compose و عملکرد پیمایش و راهاندازی View.
- Codelab
- انتقال دادن به Jetpack Compose: در این codelab، با نحوه انتقال دادن بخشهایی از برنامه Sunflower به Compose آشنا شوید.
- پستهای وبلاگ
- انتقال Sunflower به Jetpack Compose: بااستفاده از راهبرد شرحدادهشده در این صفحه، با نحوه انتقال Sunflower به Compose آشنا شوید.
- Jetpack Compose Interop: Using Compose in a RecyclerView:
با نحوه استفاده کارآمد از Compose در
RecyclerViewآشنا شوید.
مراحل بعدی
اکنون که با راهبرد انتقال برنامه مبتنی بر «نما» موجود آشنا شدید، برای کسب اطلاعات بیشتر، میاناهای برنامهسازی کاربردی همکنشپذیری را کاوش کنید.
توصیهشده برای شما
- توجه: وقتی جاوا اسکریپت خاموش باشد، نوشتار پیوند نمایش داده میشود
- معیارهای قهرمان
- استفاده از Compose در «نماها»
- پیمایش کردن
- انتقال
RecyclerViewبه فهرست Lazy