Karo deneyimini etkileşimli hale getirerek daha iyi bir deneyim yaşayabilirsiniz. Clickable
değiştiricisini öğe içindeki bir düzen öğesine ekleyerek, kullanıcının bu düzen öğesine dokunmasına tepki verebilirsiniz.
Bu sayfada, kullanıcıların etkileşimli kutularda gerçekleştirdiği birkaç yaygın işlem ve bu davranışın uygulamanızın karolarında nasıl uygulanacağına ilişkin yönergeler yer almaktadır.
Yeni karo düzeni yükle
Kullanıcı etkileşimli bir öğeye dokunduğunda karonuzun düzenini yenilemek için LoadAction
kullanın.
Aşağıdaki kod snippet'inde setId()
öğesinde ayarlanan tıklanabilir kimlik onTileRequest()
çağrısıyla birlikte 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()
)
Kutu içindeki durumu güncelle
Karonuzdaki bir etkileşimli öğenin birkaç olası durumu varsa öğenin yeni değerini göstermek için bir LoadAction
kullanın. Aşağıdaki kod snippet'inde kutu, 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()
Kutu içeriğinin yenilenmesini isteme
Kutunun tüm içeriğini güncelleme isteğinde bulunmak için LoadAction
öğesini 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 öğ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 bir etkinliği yükleme
Dışa aktarılan etkinlikleri 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 etkinliğin içinde, aşağıdaki örnekte gösterildiği gibi kutu 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: 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