ווידג'טים של אפליקציות הם תצוגות ממוזערות של אפליקציות שאפשר להטמיע באפליקציות אחרות – כמו מסך הבית – ולקבל עדכונים תקופתיים. התצוגות האלה נקראות ווידג'טים בממשק המשתמש, ואפשר לפרסם אותן באמצעות ספק ווידג'טים לאפליקציות (או ספק ווידג'טים). רכיב של אפליקציה שמכיל ווידג'טים אחרים נקרא מארח ווידג'טים של אפליקציה (או מארח ווידג'טים). איור 1 מציג דוגמה לווידג'ט של מוזיקה:
במאמר הזה מוסבר איך לפרסם ווידג'ט באמצעות ספק ווידג'טים. במאמר יצירת מארח לווידג'טים מוסבר איך ליצור AppWidgetHost משלכם לאירוח ווידג'טים של אפליקציות.
מידע על עיצוב הווידג'ט זמין במאמר סקירה כללית על ווידג'טים של אפליקציות.
רכיבי הווידג'ט
כדי ליצור ווידג'ט, צריך את הרכיבים הבסיסיים הבאים:
- אובייקט
AppWidgetProviderInfo - מתאר את המטא-נתונים של הווידג'ט, כמו הפריסה, תדירות העדכון והסיווג
AppWidgetProviderשל הווידג'ט. AppWidgetProviderInfoמוגדר ב-XML, כפי שמתואר במסמך הזה. AppWidgetProviderכיתה- הגדרת השיטות הבסיסיות שמאפשרות לכם להתממשק עם הווידג'ט באופן פרוגרמטי. באמצעותה, תקבלו שידורים כשהווידג'ט יעודכן, יופעל, יושבת או יימחק. מצהירים על
AppWidgetProviderבמניפסט ואז מטמיעים אותו, כמו שמתואר במסמך הזה. - הצגת הפריסה
- הגדרת הפריסה הראשונית של הווידג'ט. הפריסה מוגדרת ב-XML, כפי שמתואר במסמך הזה.
באיור 2 מוצג אופן השילוב של הרכיבים האלה בתהליך העיבוד הכולל של הווידג'ט של האפליקציה.
אם הווידג'ט שלכם צריך הגדרת משתמש, צריך להטמיע את פעילות ההגדרה של הווידג'ט של האפליקציה. הפעילות הזו מאפשרת למשתמשים לשנות את הגדרות הווידג'ט – לדוגמה, אזור הזמן של ווידג'ט השעון.
- החל מ-Android 12 (רמת API 31), אתם יכולים לספק הגדרת ברירת מחדל ולאפשר למשתמשים להגדיר מחדש את הווידג'ט מאוחר יותר. פרטים נוספים זמינים במאמרים שימוש בהגדרות ברירת המחדל של הווידג'ט ואיך מאפשרים למשתמשים להגדיר מחדש ווידג'טים שהוצבו.
- ב-Android 11 (רמת API 30) ומטה, הפעילות הזו מופעלת בכל פעם שהמשתמש מוסיף את הווידג'ט למסך הבית.
מומלץ גם להשתמש בשיפורים הבאים: פריסות גמישות של ווידג'טים, שיפורים שונים, ווידג'טים מתקדמים, ווידג'טים של אוספים ויצירת מארח ווידג'טים.
הצהרה על קובץ ה-XML של AppWidgetProviderInfo
הגדרת המטא-נתונים (כמו גודלי תאים שמוגדרים כברירת מחדל, אילוצים לשינוי גודל ותדירות עדכונים) זהה לחלוטין גם בתצוגות הרגילות וגם בווידג'טים שמבוססים על תצוגה מהירה.
במסמכי Glance מוסבר איך להגדיר את קובץ ה-XML של המטא-נתונים, במאמר בנושא הצהרה על קובץ ה-XML של AppWidgetProviderInfo בקטע בנושא Compose-first.
שימוש במחלקה AppWidgetProvider לטיפול בשידורים של ווידג'טים
המנגנונים של מקלט השידור בפלטפורמה, המסננים להצהרת המניפסט ולולאות האירועים של מחזור החיים מאוחדים מתחת לפלטפורמה. בפיתוח בגישת Compose-first, השידורים האלה מתואמים באמצעות רכיב ה-wrapper GlanceAppWidgetReceiver.
כדי להבין איך לרשום את מקלט השידור במניפסט וליישם שינויים בהגדרות ברירת המחדל של מחזור החיים שתואמים ל-Hilt, אפשר לעיין בקטע Use the AppWidgetProvider class to handle broadcasts (שימוש במחלקה AppWidgetProvider לטיפול בשידורים) במסמכי Glance.
יצירת פריסת הווידג'ט
צריך להגדיר פריסה ראשונית לווידג'ט ב-XML ולשמור אותה בספרייה res/layout/ של הפרויקט. פרטים נוספים זמינים בהנחיות לעיצוב.
אם אתם מכירים את הפריסות, קל ליצור את פריסת הווידג'ט. עם זאת, חשוב לדעת שפריסות הווידג'טים מבוססות על RemoteViews, שלא תומך בכל סוג של פריסה או ווידג'ט תצוגה.
אי אפשר להשתמש בתצוגות בהתאמה אישית או בתת-מחלקות של התצוגות שנתמכות על ידי RemoteViews.
RemoteViews תומך גם ב-ViewStub, שהוא View בלתי נראה בגודל אפס שאפשר להשתמש בו כדי להרחיב משאבי פריסה בזמן ריצה.
תמיכה בהתנהגות עם שמירת מצב
ב-Android 12 נוספה תמיכה בהתנהגות עם שמירת מצב באמצעות הרכיבים הקיימים הבאים:
הווידג'ט עדיין בלי שמירת מצב. האפליקציה צריכה לשמור את המצב שלה ולהירשם לאירועים של שינוי מצב.
בדוגמת הקוד הבאה אפשר לראות איך מטמיעים את הרכיבים האלה.
Kotlin
// Check the view.
remoteView.setCompoundButtonChecked(R.id.my_checkbox, true)
// Check a radio group.
remoteView.setRadioGroupChecked(R.id.my_radio_group, R.id.radio_button_2)
// Listen for check changes. The intent has an extra with the key
// EXTRA_CHECKED that specifies the current checked state of the view.
remoteView.setOnCheckedChangeResponse(
R.id.my_checkbox,
RemoteViews.RemoteResponse.fromPendingIntent(onCheckedChangePendingIntent)
)
Java
// Check the view.
remoteView.setCompoundButtonChecked(R.id.my_checkbox, true);
// Check a radio group.
remoteView.setRadioGroupChecked(R.id.my_radio_group, R.id.radio_button_2);
// Listen for check changes. The intent has an extra with the key
// EXTRA_CHECKED that specifies the current checked state of the view.
remoteView.setOnCheckedChangeResponse(
R.id.my_checkbox,
RemoteViews.RemoteResponse.fromPendingIntent(onCheckedChangePendingIntent));
צריך לספק שני פריסות: אחת שמטרגטת מכשירים עם Android מגרסה 12 ומעלה ב-res/layout-v31, והשנייה שמטרגטת גרסאות קודמות של Android מגרסה 11 ומטה בתיקיית ברירת המחדל res/layout.
הטמעה של פינות מעוגלות
חישוב הרקע החיצוני והרדיוסים הפנימיים הפרופורציונליים הוא סטנדרטי ומשותף. בפיתוח בגישת Compose-first, אפשר להגדיר את זה באופן דינמי ב-Kotlin לצד משאבי עיצוב בהתאמה אישית.
כדי להטמיע רדיוסים של פינות או להגדיר סגנונות דינמיים במכשירי Android ישנים יותר, אפשר לעיין בקטע הטמעה של פינות מעוגלות במאמר בנושא Glance.