Kutular 1.2'den itibaren dinamik ifadeleri kullanarak platform veri güncellemelerini aktarabilirsiniz. Ardından bu güncellemeleri kartlarınızdaki animasyonlarla ilişkilendirebilirsiniz. Uygulamanız bu değerle ilgili güncellemeleri saniyede bir alır.
Dinamik ifadeleri kullanarak, içeriği değişen karonun tamamını yenilemeniz gerekmez. Kartlarınızda daha ilgi çekici bir deneyim oluşturmak için bu dinamik nesneleri canlandırın.
Dinamik ifadeleri veri kaynaklarıyla ilişkilendirme
androidx.wear.protolayout ve androidx.wear.protolayout.material ad alanlarında, alanları dinamik ifadeleri kabul eden birçok sınıf bulunur.
Aşağıda bu tür içeriklere örnek olarak verilecek birkaç içerik türü verilmiştir:
- Bir
Arcnesnesinin uzunluğu ve birCircularProgressIndicatornesnesinin uzunluğu dahil olmak üzere çeşitli uzunluk değerleri. Buttonnesnesinin içerik rengi gibi herhangi bir renk.Textnesnesinin içeriği,LayoutElementsBuilders.Textnesnesinin içeriği veCircularProgressIndicatornesnesinin içerik açıklaması gibi birçok dize değeri.
Kartınızdaki bir öğenin olası değeri olarak dinamik ifade kullanmak için öğenin ilgili *Prop dinamik mülk türünü kullanın ve veri kaynağını dinamik mülk türünün oluşturucu sınıfının setDynamicValue() yöntemine iletin.
Kutular aşağıdaki dinamik mülk türlerini destekler:
- Gösterimden bağımsız piksel cinsinden ölçülen doğrusal boyutlar için
DimensionBuilders.DpPropdeğerini kullanın. - Derece cinsinden ölçülen açısal boyutlar için
DimensionBuilders.DegreesPropsimgesini kullanın. - Dize değerleri için
TypeBuilders.StringPropkullanın. - Renk değerleri için
ColorBuilders.ColorPropsimgesini kullanın. - Kayan nokta değerleri için
TypeBuilders.FloatPropkullanın.
Fiziksel boyutları (bir karodaki renk hariç tüm değerler) etkileyen dinamik bir ifade kullandığınızda, dize biçimi gibi bir dizi ilgili kısıtlamayı da belirtmeniz gerekir. Bu kısıtlamalar, sistem oluşturucunun bir değerin karonuzda kaplayabildiği maksimum alan miktarını belirlemesine olanak tanır. Genellikle, setLayoutConstraintsForDynamic* ile başlayan bir yöntem çağırarak bu kısıtlamaları dinamik ifade düzeyinde değil, öğe düzeyinde belirtirsiniz.
Aşağıdaki kod snippet'inde, kalp atış hızı güncellemelerinin -- yedek değeriyle birlikte 3 basamak kullanılarak nasıl gösterileceği gösterilmektedir:
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() )
Tek bir karoda az sayıda ifade kullanın
Wear OS, tek bir kartın sahip olabileceği ifade sayısına sınırlama getirir. Bir karo toplamda çok fazla dinamik ifade içeriyorsa dinamik değerler yoksayılır ve sistem, ilgili dinamik mülk türlerine sağladığınız statik değerlere geri döner.
Dinamik verileri bir durum nesnesine birleştirme
Veri kaynaklarından gelen en son güncelleme grubunu bir durum olarak birleştirebilir ve değer oluşturma için karonuza iletebilirsiniz.
Kartlarınızda eyalet bilgilerini kullanmak için aşağıdaki adımları uygulayın:
Kartınızın durumunun farklı değerlerini temsil eden bir anahtar grubu oluşturun. Bu örnekte, su tüketimi ve bir not için anahtarlar oluşturulur:
Kotlin
companion object { val KEY_WATER_INTAKE = AppDataKey<DynamicInt32>("water_intake") val KEY_NOTE = AppDataKey<DynamicString>("note") }
Java
private static final AppDataKey<DynamicInt32> KEY_WATER_INTAKE = new AppDataKey<DynamicInt32>("water_intake"); private static final AppDataKey<DynamicString> KEY_NOTE = new AppDataKey<DynamicString>("note");
onTileRequest()uygulamanızdasetState()'u çağırın ve her anahtardan belirli bir dinamik veri değerine yönelik ilk eşlemeleri oluşturun:Kotlin
override fun onTileRequest(requestParams: TileRequest): ListenableFuture<Tile> { val state = State.Builder() .addKeyToValueMapping(KEY_WATER_INTAKE, DynamicDataBuilders.DynamicDataValue.fromInt(200)) .addKeyToValueMapping(KEY_NOTE, DynamicDataBuilders.DynamicDataValue.fromString("Note about day")) .build() // ... return Futures.immediateFuture(Tile.Builder() // Set resources, timeline, and other tile properties. .setState(state) .build() )
Java
@Override protected ListenableFuture<Tile> onTileRequest( ListenableFuture<Tile> { State state = new State.Builder() .addKeyToValueMapping(KEY_WATER_INTAKE, DynamicDataBuilders.DynamicDataValue.fromInt(200)) .addKeyToValueMapping(KEY_NOTE, DynamicDataBuilders.DynamicDataValue.fromString("Note about day")) .build(); // ... return Futures.immediateFuture(Tile.Builder() // Set resources, timeline, and other tile properties. .setState(state) .build() ); }
Eyaletten alınan bu verileri göstermek istediğiniz bir yerde düzeninizi oluştururken
Dynamic*türü bir nesne kullanın. Önceki değerden mevcut değere animasyon göstermek içinanimate()işlevini de çağırabilirsiniz:Kotlin
DynamicInt32.from(KEY_WATER_INTAKE).animate()
Java
DynamicInt32.from(KEY_WATER_INTAKE).animate();
Gerekirse durumu yeni değerlerle de güncelleyebilirsiniz. Bu, kartın
LoadActionparçası olabilir.Bu örnekte, su tüketimi değeri
400olarak güncellenmiştir:Kotlin
val loadAction = LoadAction.Builder() .setRequestState( State.Builder() .addKeyToValueMapping( KEY_WATER_INTAKE, DynamicDataBuilders.DynamicDataValue.fromInt(400) ) .build() ) .build()
Java
LoadAction loadAction = new LoadAction.Builder() .setRequestState( new State.Builder() .addKeyToValueMapping( KEY_WATER_INTAKE, DynamicDataBuilders.DynamicDataValue.fromInt(400) ).build() ).build();
Sizin için önerilenler
- Not: JavaScript kapalıyken bağlantı metni gösterilir
- ProtoLayout ad alanlarına taşıma
- Kartları kullanmaya başlama
- Dikkat edilmesi gereken diğer noktalar