החל מגרסה 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
- איך מתחילים לעבוד עם משבצות
- שיקולים נוספים