החל מגרסה 1.2 של Tiles, אפשר להזרים עדכוני נתונים של הפלטפורמה באמצעות ביטויים דינמיים. אחר כך תוכלו לשייך את העדכונים האלה לאנימציות במשבצות. הערך הזה של האפליקציה מתעדכן כל שנייה.
כשמשתמשים בביטויים דינמיים, לא צריך לרענן את כל המשבצת כשהתוכן שלה משתנה. כדי ליצור חוויה מעניינת יותר במשבצות, אפשר להנפיש את האובייקטים הדינמיים.
שיוך של ביטויים דינמיים למקורות נתונים
מרחבי השמות androidx.wear.protolayout ו-androidx.wear.protolayout.material
מכילים הרבה מחלקות שהשדות שלהן מקבלים ביטויים דינמיים. הנה כמה דוגמאות:
- כמה ערכי אורך, כולל האורך של אובייקט
Arcוהאורך של אובייקטCircularProgressIndicator. - כל צבע, כמו צבע התוכן של אובייקט
Button. - ערכים רבים של מחרוזות, כולל התוכן של אובייקט
Text, התוכן של אובייקטLayoutElementsBuilders.Textותיאור התוכן של אובייקטCircularProgressIndicator.
כדי להשתמש בביטוי דינמי כערך אפשרי לרכיב במשבצת, צריך להשתמש בסוג המאפיין הדינמי המתאים של הרכיב *Prop ולהעביר את מקור הנתונים לשיטה setDynamicValue() של מחלקת הבונה של סוג המאפיין הדינמי.
המשבצות תומכות בסוגי הנכסים הדינמיים הבאים:
- למידות לינאריות, שנמדדות בפיקסלים שלא תלויים בתצוגה, משתמשים ב-
DimensionBuilders.DpProp. - למידות זוויתיות, שנמדדות במעלות, משתמשים ב-
DimensionBuilders.DegreesProp. - לערכי מחרוזת, משתמשים ב-
TypeBuilders.StringProp. - לערכי צבע, משתמשים ב-
ColorBuilders.ColorProp. - לערכים של נקודה צפה, משתמשים ב-
TypeBuilders.FloatProp.
כשמשתמשים בביטוי דינמי שמשפיע על מידות פיזיות – כל ערך במשבצת חוץ מצבע – צריך לציין גם קבוצה של אילוצים קשורים, כמו פורמט מחרוזת. האילוצים האלה מאפשרים למעבד התצוגה של המערכת לקבוע את כמות המקום המקסימלית שערך יכול לתפוס במשבצת. בדרך כלל, מציינים את האילוצים האלה ברמת הרכיב ולא ברמת הביטוי הדינמי, באמצעות קריאה למתודה שמתחילה ב-setLayoutConstraintsForDynamic*.
בקטע הקוד הבא אפשר לראות איך להציג עדכונים של קצב הלב באמצעות 3 ספרות, עם ערך ברירת מחדל של --:
override fun onTileRequest(requestParams: RequestBuilders.TileRequest) = Futures.immediateFuture( Tile.Builder() .setResourcesVersion(RESOURCES_VERSION) .setFreshnessIntervalMillis(60 * 60 * 1000) // 60 minutes .setTileTimeline( Timeline.fromLayoutElement( Text.Builder( this, TypeBuilders.StringProp.Builder("--") .setDynamicValue( PlatformHealthSources.heartRateBpm() .format() .concat(DynamicBuilders.DynamicString.constant(" bpm")) ) .build(), TypeBuilders.StringLayoutConstraint.Builder("000").build(), ) .build() ) ) .build() )
שימוש במספר קטן של ביטויים במשבצת אחת
ב-Wear OS יש מגבלה על מספר ההבעות שיכולות להיות בפריט אחד. אם משבצת מכילה יותר מדי ביטויים דינמיים, המערכת מתעלמת מהערכים הדינמיים וחוזרת לערכים הסטטיים שסיפקתם לסוגי המאפיינים הדינמיים הרלוונטיים.
איחוד נתונים דינמיים באובייקט מצב
אתם יכולים לאחד את קבוצת העדכונים האחרונה ממקורות הנתונים למצב, שמועבר לרכיב הגרפי לצורך עיבוד הערך.
כדי להשתמש בפרטי המצב באריחים, צריך לבצע את השלבים הבאים:
מגדירים קבוצה של מפתחות שמייצגים את הערכים השונים של מצב הרכיב. בדוגמה הזו נוצרים מפתחות לנתוני צריכת מים ולפתק qqq:
companion object { val KEY_WATER_INTAKE = intAppDataKey("key_water_intake") val KEY_NOTE = stringAppDataKey("key_note") }
בהטמעה של
onTileRequest(), קוראים ל-setState()ויוצרים מיפויים ראשוניים מכל מפתח לערך נתונים דינמי מסוים:override fun onTileRequest( requestParams: RequestBuilders.TileRequest ): ListenableFuture<Tile?> { // If the tile hasn't had any state set yet, use the default values val state = if (requestParams.currentState.keyToValueMapping.isNotEmpty()) requestParams.currentState else StateBuilders.State.Builder() .setStateMap( dynamicDataMapOf( KEY_WATER_INTAKE mapTo 200, KEY_NOTE mapTo "Good" ) ) .build() return Futures.immediateFuture( Tile.Builder() // Set resources, timeline, and other tile properties. .setState(state) .build() ) }
כשיוצרים פריסה, במקום שבו רוצים להציג את הנתונים האלה מהמצב, משתמשים באובייקט מסוג
Dynamic*. אפשר גם להתקשר אלanimate()כדי להציג אנימציה מהערך הקודם לערך הנוכחי:val waterIntakeValue = DynamicBuilders.DynamicInt32.from(KEY_WATER_INTAKE)
במקרה הצורך, אפשר גם לעדכן את הסטטוס עם ערכים חדשים. הוא יכול להיות חלק מ
LoadActionשל משבצת.בדוגמה הזו, ערך צריכת המים מתעדכן ל-
400:val loadAction = loadAction( dynamicDataMapOf( KEY_WATER_INTAKE mapTo 400, KEY_NOTE mapTo "Outstanding" ) )
מומלץ בשבילכם
- הערה: טקסט הקישור מוצג כש-JavaScript מושבת
- העברה למרחבי שמות של ProtoLayout
- איך מתחילים לעבוד עם משבצות
- שיקולים נוספים