בדף הזה תמצאו פרטים על שיפורים אופציונליים בווידג'טים שזמינים החל מ-Android 12 (רמת API 31). התכונות האלה הן אופציונליות, אבל הן מתאימות במיוחד להטמעה ולשיפור של חוויית המשתמשים בווידג'ט של המשתמשים.
שימוש בצבעים דינמיים
החל מ-Android 12, אפשר להשתמש בצבעים של עיצוב המכשיר בווידג'ט ללחצנים, לרקעים ולרכיבים אחרים. כך מתקבלים מעברים ועקביות חלקים יותר בין ווידג'טים שונים.
יש שתי דרכים ליצור צבעים דינמיים:
משתמשים בעיצוב ברירת המחדל של המערכת (
@android:style/Theme.DeviceDefault.DayNight
) בפריסה ברמה הבסיסית.השתמשו בעיצוב Material 3 (
Theme.Material3.DynamicColors.DayNight
) מהספרייה Material Components ל-Android, שזמינה החל מ-Material Components for Android v1.6.0.
אחרי שמגדירים את העיצוב בפריסת הבסיס, אפשר להשתמש במאפייני צבע משותפים בפריסת הבסיס או בכל אחד מהצאצאים שלה כדי לבחור את הצבעים הדינמיים.
דוגמאות למאפייני צבע שאפשר להשתמש בהם:
?attr/primary
?attr/primaryContainer
?attr/onPrimary
?attr/onPrimaryContainer
בדוגמה הבאה עם העיצוב Material 3, צבע העיצוב של המכשיר הוא 'סגול'. הצבע המשני והרקע של הווידג'ט מותאמים למצב הבהיר והכהה, כפי שמוצג בספרות 1 ו-2.
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="?attr/colorPrimaryContainer"
android:theme="@style/Theme.Material3.DynamicColors.DayNight">
<ImageView
...
app:tint="?attr/colorPrimaryContainer"
android:src="@drawable/ic_partly_cloudy" />
<!-- Other widget content. -->
</LinearLayout>
תאימות לאחור לצבעים דינמיים
צבעים דינמיים זמינים רק במכשירים עם Android מגרסה 12 ואילך. כדי לספק עיצוב מותאם אישית לגרסאות ישנות יותר, יוצרים עיצוב ברירת מחדל עם הצבעים המותאמים אישית ומגדיר חדש (values-v31
) באמצעות מאפייני עיצוב ברירת המחדל.
הנה דוגמה לשימוש בעיצוב Material 3:
/values/styles.xml
<resources>
<style name="MyWidgetTheme" parent="Theme.Material3.DynamicColors.DayNight">
<!-- Override default colorBackground attribute with custom color. -->
<item name="android:colorBackground">@color/my_background_color</item>
<!-- Add other colors/attributes. -->
</style>
</resources>
/values-v31/styles.xml
<resources>
<!-- Do not override any color attribute. -->
<style name="MyWidgetTheme" parent="Theme.Material3.DynamicColors.DayNight" />
</resources>
/layout/my_widget_layout.xml
<resources>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
...
android:background="?android:attr/colorBackground"
android:theme="@style/MyWidgetTheme" />
</resources>
הפעלת תמיכה קולית
פעולות באפליקציה מאפשרות ל-Google Assistant להציג ווידג'טים בתגובה לפקודות קוליות רלוונטיות של המשתמשים. אם תגדירו את הווידג'ט כך שישיב לכוונות מובנות (BIIs), האפליקציה תוכל להציג וידג'טים באופן יזום בממשקי Assistant, כמו Android ו-Android Auto. למשתמשים יש אפשרות להצמיד ווידג'טים ש-Assistant מציגה למרכז האפליקציות, כדי לעודד מעורבות עתידית.
לדוגמה, אתם יכולים להגדיר את הווידג'ט לסיכום אימוני הכושר באפליקציית האימון כדי לבצע את הפקודות הקוליות של המשתמשים שמפעילות את ה-BII GET_EXERCISE_OBSERVATION
. Assistant מציגה את הווידג'ט באופן יזום כשמשתמשים מפעילים את ה-BII הזה על ידי שליחת בקשות כמו "Ok Google, how many miles did I run this week on ExampleApp?"
יש עשרות מזהי BII שמכסים כמה קטגוריות של אינטראקציה עם משתמשים, כך שכמעט כל אפליקציה ל-Android יכולה לשפר את הווידג'טים שלה לשימוש בקול. למידע נוסף, קראו את המאמר שילוב פעולות באפליקציות עם ווידג'טים של Android.
שיפור חוויית השימוש בבורר הווידג'טים של האפליקציה
ב-Android 12 אפשר לשפר את החוויה של בוחר הווידג'טים באפליקציה על ידי הוספת תצוגות מקדימות דינמיות לווידג'טים ותיאורי ווידג'טים.
הוספת תצוגות מקדימות של ווידג'טים שניתן לשנות את הגודל שלהם לכלי לבחירת ווידג'טים
החל מגרסה Android 12, אפשר לשנות את הגודל של התצוגה המקדימה של הווידג'ט שמוצגת בבורר הווידג'טים. צריך לספק אותה כפריסת XML שמוגדרת לגודל ברירת המחדל של הווידג'ט. בעבר, התצוגה המקדימה של הווידג'ט הייתה משאב סטטי שניתן לציור, שבמקרים מסוימים הוביל לתצוגות מקדימות שלא משקפות במדויק את המראה של הווידג'טים כשהם מתווספים למסך הבית.
כדי להטמיע תצוגות מקדימות של ווידג'טים שניתן לשנות את הגודל שלהן, צריך להשתמש במאפיין previewLayout
של הרכיב appwidget-provider
כדי לספק פריסה של XML במקום זאת:
<appwidget-provider
android:previewLayout="@layout/my_widget_preview">
</appwidget-provider>
מומלץ להשתמש באותה פריסה כמו בווידג'ט בפועל, עם ערכים ריאליסטיים של ברירת מחדל או ערכים לבדיקה. רוב האפליקציות משתמשות באותם previewLayout
ו-initialLayout
. בקטע הבא בדף הזה מוסבר איך ליצור פריסות מדויקות של קטעים מקדימים.
מומלץ לציין גם את המאפיינים previewLayout
וגם את המאפיינים previewImage
, כדי שהאפליקציה תוכל לחזור להשתמש ב-previewImage
אם המכשיר של המשתמש לא תומך ב-previewLayout
. המאפיין previewLayout
מקבל קדימות על פני המאפיין previewImage
.
גישות מומלצות ליצירת תצוגות מקדימות מדויקות
כדי להטמיע תצוגות מקדימות של ווידג'טים שניתן לשנות את הגודל שלהן, משתמשים במאפיין previewLayout
של הרכיב appwidget-provider
כדי לספק פריסה של XML:
<appwidget-provider
...
android:previewLayout="@layout/my_widget_preview">
</appwidget-provider>
כדי לראות תצוגה מקדימה מדויקת, אפשר לספק את ערכי ברירת המחדל של הפריסה של הווידג'ט באופן ישיר באמצעות הפעולות הבאות:
הגדרת
android:text="@string/my_widget_item_fake_1"
לרכיבים שלTextView
.הגדרת תמונה או סמל ברירת מחדל או placeholder, כמו
android:src="@drawable/my_widget_icon"
, לרכיביImageView
.
ללא ערכי ברירת מחדל, יכול להיות שבתצוגה המקדימה יוצגו ערכים שגויים או ריקים. יתרון חשוב של הגישה הזו הוא שאפשר לספק תוכן תצוגה מקדימה מותאם לאזור.
למידע נוסף, תוכלו לקרוא על גישות מומלצות לתצוגות מקדימות מורכבות יותר שמכילות ListView
, GridView
או StackView
, במאמר יצירת תצוגות מקדימות מדויקות שכוללות פריטים דינמיים.
תאימות לאחור עם תצוגות מקדימות של ווידג'טים שניתן לשנות
כדי לאפשר לבוררי הווידג'טים ב-Android 11 (רמת API 30) ומטה להציג תצוגות מקדימות של
הווידג'ט, צריך לציין את המאפיין
previewImage
.
אם אתם משנים את המראה של הווידג'ט, עדכנו את תמונת התצוגה המקדימה.
הוספת שם לווידג'ט
לווידג'טים צריך להיות שם ייחודי כשהם מוצגים בבורר הווידג'טים.
שמות הווידג'טים נטענים מהמאפיין label
של הרכיב receiver
של הווידג'ט, בקובץ AndroidManifest.xml.
<receiver
….
android:label="Memories">
….
</receiver>
הוספת תיאור לווידג'ט
החל מ-Android 12, צריך לספק תיאור לווידג'ט שיוצג בבורר הווידג'טים.
מספקים תיאור של הווידג'ט באמצעות המאפיין description
של הרכיב <appwidget-provider>
:
<appwidget-provider
android:description="@string/my_widget_description">
</appwidget-provider>
אפשר להשתמש במאפיין descriptionRes
בגרסאות קודמות של Android, אבל הכלי לבחירת ווידג'טים מתעלם ממנו.
הפעלת מעברים חלקים יותר
החל מגרסה 12 של Android, מרכזי האפליקציות מספקים מעבר חלק יותר כשמשתמש מפעיל את האפליקציה שלכם מווידג'ט.
כדי להפעיל את המעבר המשופר הזה, צריך להשתמש ב-@android:id/background
או ב-android.R.id.background
לזיהוי רכיב הרקע:
// Top-level layout of the widget.
<LinearLayout
android:id="@android:id/background">
</LinearLayout>
באפליקציה שלכם אפשר להשתמש ב-@android:id/background
בגרסאות קודמות של Android בלי לגרום לשיבושים, אבל המערכת תתעלם ממנו.
שימוש בשינוי של RemoteViews בסביבת זמן הריצה
החל מ-Android 12, אפשר להשתמש בכמה שיטות RemoteViews
שמספקות שינוי זמן ריצה של מאפייני RemoteViews
. הרשימה המלאה של ה-methods שנוספו מופיעה במאמרי העזרה של API RemoteViews
.
בדוגמת הקוד הבאה מוסבר איך להשתמש בכמה מהשיטות האלה.
Kotlin
// Set the colors of a progress bar at runtime. remoteView.setColorStateList(R.id.progress, "setProgressTintList", createProgressColorStateList()) // Specify exact sizes for margins. remoteView.setViewLayoutMargin(R.id.text, RemoteViews.MARGIN_END, 8f, TypedValue.COMPLEX_UNIT_DP)
Java
// Set the colors of a progress bar at runtime. remoteView.setColorStateList(R.id.progress, "setProgressTintList", createProgressColorStateList()); // Specify exact sizes for margins. remoteView.setViewLayoutMargin(R.id.text, RemoteViews.MARGIN_END, 8f, TypedValue.COMPLEX_UNIT_DP);