از «کاشیهای ۱.۲» به بعد، میتوانید بهروزرسانیهای دادههای پلاتفرم را بااستفاده از عبارتهای پویا جاریسازی کنید. سپس میتوانید این بهروزرسانیها را با پویانماییهای موجود در کاشیهایتان مرتبط کنید. برنامه شما هر ثانیه برای این مقدار بهروزرسانی دریافت میکند.
بااستفاده از عبارتهای پویا، وقتی محتوای کاشی تغییر میکند، نیازی نیست کل کاشی را بازآوری کنید. برای ایجاد تجربهای جذابتر در کاشیهایتان، آن اشیای پویا را پویانمایی کنید.
بیانهای پویا را با منابع داده مرتبط کنید
فضاهای نام 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* شروع میشود.
تکهکد زیر نحوه نمایش بهروزرسانیهای ضربان قلب را بااستفاده از ۳ رقم، با مقدار جایگزین -- نشان میدهد:
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" ) )
توصیهشده برای شما
- توجه: نوشتار پیوند وقتی جاوا اسکریپت خاموش است نمایش داده میشود
- انتقال به جای نامهای ProtoLayout
- شروع به کار با کاشیها
- ملاحظات دیگر