אם יש לכם אפליקציה קיימת שמבוססת על תצוגה, יכול להיות שלא תרצו לכתוב מחדש את כל ממשק המשתמש שלה בבת אחת. בדף הזה מוסבר איך מוסיפים רכיבים חדשים של Compose לאפליקציה הקיימת. כדי להתחיל להשתמש ב-Compose באפליקציה, אפשר לעיין במאמר הגדרת Compose לאפליקציה קיימת.
Jetpack Compose תוכנן עם יכולת פעולה הדדית של View כבר מההתחלה. הפונקציות האלה מאפשרות להעביר את האפליקציה הקיימת שמבוססת על תצוגה ל-Compose, ועדיין לפתח תכונות חדשות. כדי לעבור ל-Compose, מומלץ לבצע העברה מצטברת שבה Compose ו-Views יתקיימו זה לצד זה בבסיס הקוד עד שהאפליקציה תעבור ל-Compose באופן מלא.
כדי להעביר את האפליקציה ל-Compose:
- פיתוח מסכים חדשים באמצעות Compose.
- כשאתם יוצרים תכונות, זיהוי רכיבים שניתנים לשימוש חוזר והתחילה של יצירת ספרייה של רכיבים נפוצים בממשק המשתמש.
- מחליפים את התכונות הקיימות מסך אחד בכל פעם.
פיתוח מסכים חדשים באמצעות Compose
השימוש ב-Compose ליצירת תכונות חדשות שמשתמשות במסך מלא הוא הדרך הטובה ביותר להגדיל את השימוש ב-Compose. האסטרטגיה הזו מאפשרת לכם להוסיף תכונות וליהנות מהיתרונות של Compose, תוך התמקדות בצרכים העסקיים של החברה.
כשמשתמשים ב-Compose כדי ליצור מסכים חדשים באפליקציה הקיימת, עדיין צריך לפעול במסגרת האילוצים של הארכיטקטורה של האפליקציה. אם אתם משתמשים ב-Fragments וברכיב הניווט, תצטרכו ליצור Fragment חדש ולהוסיף את התוכן שלו ל-Compose.
כדי להשתמש ב-Compose ב-Fragment, צריך להחזיר ComposeView
ב-method של מחזור החיים 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.
הוספת תכונות חדשות למסכים קיימים
אפשר גם להשתמש בכלי הכתיבה במסך קיים שמבוסס על תצוגה, אם התכונה החדשה שאתם מוסיפים היא חלק ממסך קיים. כדי לעשות זאת, מוסיפים 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 לתאימות הדדית.
יצירה של ספרייה של רכיבים נפוצים בממשק המשתמש
כשיוצרים תכונות באמצעות Compose, מגלים במהירות שמתקבלת ספרייה של רכיבים. יצירה של ספרייה של רכיבי ממשק משתמש נפוצים מאפשרת לכם ליצור מקור אמין אחד לרכיבים האלה באפליקציה, ולעודד שימוש חוזר בהם. כך תוכלו להשתמש בספרייה הזו בתכונות שתיצרו. השיטה הזו שימושית במיוחד אם אתם יוצרים מערכת עיצוב בהתאמה אישית ב-Compose.
בהתאם לגודל האפליקציה, הספרייה הזו יכולה להיות חבילת מודולים, מודול או ספריית מודולים נפרדת. למידע נוסף על ארגון מודולים באפליקציה, תוכלו לעיין במדריך לארגון מודולים באפליקציות ל-Android.
החלפת תכונות קיימות ב-Compose
בנוסף לשימוש ב-Compose כדי ליצור תכונות חדשות, כדאי להעביר בהדרגה תכונות קיימות באפליקציה כדי לנצל את היתרונות של Compose.
שימוש ב-Compose בלבד יכול לזרז את הפיתוח של האפליקציה, וגם לצמצם את גודל ה-APK ואת זמני ה-build של האפליקציה. מידע נוסף זמין במאמר השוואה בין הביצועים של 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. הגישה הזו נקראת גם מלמטה למעלה.
הסרת קטעים ורכיב הניווט
תוכלו לעבור ל-Navigation Compose אחרי שתוכלו להסיר את כל ה-Fragments ולהחליף אותם ברכיבי Composable תואמים ברמת המסך. רכיבים מורכבים ברמת המסך יכולים להכיל שילוב של תוכן מ-Compose ותוכן מ-View, אבל כל יעדי הניווט חייבים להיות רכיבים מורכבים כדי לאפשר העברה של Compose לניווט. עד אז, כדאי להמשיך להשתמש ברכיב הניווט שמבוסס על קטעים בבסיס הקוד המשולב של View ו-Compose. מידע נוסף זמין במאמר העברת ניווט ב-Jetpack ל-Navigation Compose.
מקורות מידע נוספים
תוכלו להיעזר במקורות המידע הנוספים הבאים כדי לקבל מידע נוסף על העברת האפליקציה הקיימת שלכם שמבוססת על תצוגה ל-Compose:
- Codelab
- מעבר ל-Jetpack Compose: בקודלאב הזה מוסבר איך להעביר חלקים מאפליקציית Sunflower ל-Compose.
- פוסטים בבלוג
- העברת Sunflower ל-Jetpack Compose: איך הועבר Sunflower ל-Compose באמצעות השיטה שמתוארת בדף הזה.
- Jetpack Compose Interop: שימוש ב-Compose ב-RecyclerView: איך משתמשים ב-Compose ב-
RecyclerView
בצורה יעילה.
השלבים הבאים
עכשיו, אחרי שסיפרנו לכם איך להעביר את האפליקציה הקיימת שלכם שמבוססת על תצוגה, תוכלו לקרוא מידע נוסף על ממשקי ה-API ליכולת פעולה הדדית.
מומלץ עבורך
- הערה: טקסט הקישור מוצג כש-JavaScript מושבת
- שימוש בתכונה 'כתיבה' בתצוגות
- גלילה
- העברת
RecyclerView
לרשימה עצלה