Karoları etkileşimli hale getirerek deneyiminizi daha da zenginleştirebilirsiniz.
Clickable
değiştiricisini öğe içindeki bir düzen öğesine dönüştürdüğünüzde
kullanıcıya dokunmadan önce
Bu sayfada, kullanıcıların etkileşimli modda gerçekleştirdiği bazı yaygın işlemler ve bu davranışı uygulamanızın tıklayın.
Yeni karo düzeni yükle
Kullanıcı bir simgesine dokunduğunda karonunuzun düzenini yenilemek için LoadAction
simgesini kullanın.
etkileşimli bir öğedir.
Aşağıdaki kod snippet'inde, setId()
içinde ayarlanan tıklanabilir kimlik iletilmiştir.
onTileRequest()
çağrısıyla birlikte takip edin, böylece temel olarak farklı bir düzen
bu kimlikte:
override fun onTileRequest(requestParams: TileRequest) = Futures.immediateFuture(
Tile.Builder()
.setResourcesVersion("1")
.setTileTimeline(Timeline.fromLayoutElement(
when(requestParams.currentState.lastClickableId) {
"foo" -> myFooLayout()
else -> myOtherLayout()
}
)).build()
)
Kutu içindeki durumu güncelle
Karonuzdaki etkileşimli bir öğenin birkaç olası durumu varsa bir
Öğenin yeni değerini göstermek için LoadAction
değerini girin. Aşağıdaki kod snippet'inde,
kutucuğunda, onay kutusunun güncellenmiş değeri gösterilir:
private fun checkboxChip(
checkboxValue: Boolean,
deviceParameters: DeviceParametersBuilders.DeviceParameters
): Chip =
Chip.Builder(
context,
Clickable.Builder()
.setOnClick(LoadAction.Builder()
.build()
).build(),
deviceParameters
).setIconContent(if (checkboxValue) "check" else "checkoff")
// Set checkbox labels and colors here.
.build()
Kutu içeriğinin yenilenmesini isteme
Kutunun tüm içeriğini güncelleme isteğinde bulunmak için LoadAction
öğesini kullanıp güncelleyin
aşağıdaki kod snippet'inde gösterildiği gibi öğenin istek durumuna göre değişir.
private fun tappableElement(): LayoutElement =
Button.Builder(this, Clickable.Builder()
.setId("foo")
.setOnClick(LoadAction.Builder()
.setRequestState(
StateBuilders.State.Builder()
/* Update state information here. */
.build()
).build()
).build())
.setTextContent("Tap me!")
.build()
Derin bağlantı kullanarak etkinlik yükleme
Derin bağlantı kullanarak bir etkinliği yüklemek için tıklanabilir öğeyi bir
LoadAction
nesne:
private fun tappableElement(): LayoutElement =
Text.Builder()
.setText("Tap me!")
.setModifiers(Modifiers.Builder()
.setClickable(Clickable.Builder()
.setId("foo")
.setOnClick(LoadAction.Builder().build())
.build()
).build()
).build()
Ardından, onTileRequest()
yönteminizde, bir TaskStackBuilder
nesnesini
yardımcı:
override fun onTileRequest(requestParams: TileRequest): ListenableFuture<TileBuilders.Tile> {
val lastClickableId = requestParams.currentState.lastClickableId
if (lastClickableId == "foo") {
TaskStackBuilder.create(this)
.addNextIntentWithParentStack(Intent(
Intent.ACTION_VIEW,
"https://www.example.com/$lastClickableId".toUri(),
context,
MyWearOsAppActivity::class.java
))
.startActivities()
}
// The user clicked somewhere else on the tile instead.
}
Dışa aktarılan bir etkinliği yükleme
Dışa aktarılan bir etkinliği sınıf adına ve intent ekstralarına göre yüklemek için
LaunchAction
.
private fun tappableElement(): LayoutElement =
Text.Builder(this, "Tap me!")
.setModifiers(Modifiers.Builder()
.setClickable(Clickable.Builder()
.setId("foo")
.setOnClick(ActionBuilders.launchAction(
ComponentName("my.package.name", "MyActivity")
)).build()
).build()
).build()
Başlatılan etkinliğin içinden, kart için kullanılan kimliği alabilirsiniz aşağıdaki örnekte gösterildiği gibi:
class MyActivity : FragmentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val clickableId =
intent.getStringExtra(TileService.EXTRA_CLICKABLE_ID)
// clickableId will be "foo" when launched from the Tile
}
}
Sizin için önerilenler
- Not: JavaScript kapalıyken bağlantı metni gösterilir
- Wear OS'te ilk Kart'ınızı oluşturma
- ProtoLayout ad alanlarına taşıma
- Karolarda dinamik güncellemeleri gösterme