Kart deneyiminizi etkileşimli hale getirerek daha iyi hale getirebilirsiniz. Karonun içindeki bir düzen öğesine Clickable
değiştiricisini ekleyerek bu düzen öğesine dokunan bir kullanıcıya tepki verebilirsiniz.
Bu sayfada, kullanıcıların etkileşimli karolarda gerçekleştirdiği bazı yaygın işlemler ve bu davranışın uygulamanızın karolarında nasıl uygulanacağı açıklanmaktadır.
Yeni karo düzeni yükle
Kullanıcı etkileşimli bir öğeye dokunduğunda karonunuzun düzenini yenilemek için LoadAction
özelliğini kullanın.
Aşağıdaki kod snippet'inde, setId()
içinde ayarlanan tıklanabilir kimlik onTileRequest()
çağrısına iletilir. Böylece, bu kimliğe göre farklı bir düzen oluşturabilirsiniz:
override fun onTileRequest(requestParams: TileRequest) = Futures.immediateFuture(
Tile.Builder()
.setResourcesVersion("1")
.setTileTimeline(Timeline.fromLayoutElement(
when(requestParams.currentState.lastClickableId) {
"foo" -> myFooLayout()
else -> myOtherLayout()
}
)).build()
)
Karodaki durumu güncelle
Karonuzdaki etkileşimli bir öğenin birkaç olası durumu varsa öğenin yeni değerini göstermek için bir LoadAction
kullanın. Aşağıdaki kod snippet'inde blok, bir onay kutusunun güncellenmiş değerini gösterir:
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()
Kart içeriğinin yenilenmesini isteyin
Karonun tüm içeriğinin güncellenmesini istemek için LoadAction
kodunu kullanın ve kartın istek durumunu aşağıdaki kod snippet'inde gösterildiği gibi güncelleyin.
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 etkinlik yüklemek için tıklanabilir bir öğeyi bir LoadAction
nesnesiyle ilişkilendirin:
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 yardımcı olarak bir TaskStackBuilder
nesnesi kullanın:
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 etkinlikleri yükleme
Dışa aktarılan bir etkinliği sınıf adına göre ve intent ekstralarıyla yüklemek için LaunchAction
kullanın.
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 etkinlikten, aşağıdaki örnekte gösterildiği gibi karo için kullanılan kimliği alabilirsiniz:
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: Bağlantı metni JavaScript kapalıyken gösterilir
- Kutuları güncelleme
- Kartları kullanmaya başlama
- Karolarda dinamik güncellemeleri gösterme