如果想進一步改善資訊方塊的使用體驗,不妨為其增添互動功能。將 Clickable
修飾符新增到資訊方塊的版面配置元素內,即可在使用者輕觸該版面配置元素時做出回應。
本頁列出使用者經常在互動式資訊方塊中執行的幾項動作,並附上指引說明如何在應用程式的資訊方塊中實作上述行為。
載入新的資訊方塊版面配置
當使用者輕觸互動式元素時,請使用 LoadAction
重新整理資訊方塊的版面配置。
在下列程式碼片段中,setId()
當中設定的可按式 ID 會傳遞到 onTileRequest()
呼叫內,讓您可以按照這個 ID 轉譯其他版面配置:
override fun onTileRequest(requestParams: TileRequest) = Futures.immediateFuture(
Tile.Builder()
.setResourcesVersion("1")
.setTileTimeline(Timeline.fromLayoutElement(
when(requestParams.currentState.lastClickableId) {
"foo" -> myFooLayout()
else -> myOtherLayout()
}
)).build()
)
更新資訊方塊內的狀態
如果資訊方塊中的互動式元素有多種可能的狀態,請使用 LoadAction
顯示元素的新值。在下列程式碼片段中,資訊方塊會顯示核取方塊的更新值:
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()
要求重新整理資訊方塊內容
如想要求更新資訊方塊的整體內容,請使用 LoadAction
並更新資訊方塊的要求狀態,如以下程式碼片段所示。
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()
使用深層連結載入活動
如要使用深層連結載入活動,請將可點選的元素與 LoadAction
物件建立關聯:
private fun tappableElement(): LayoutElement =
Text.Builder()
.setText("Tap me!")
.setModifiers(Modifiers.Builder()
.setClickable(Clickable.Builder()
.setId("foo")
.setOnClick(LoadAction.Builder().build())
.build()
).build()
).build()
接著,在 onTileRequest()
方法中,使用 TaskStackBuilder
物件做為輔助:
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.
}
載入匯出的活動
如要依據類別名稱,並透過意圖額外項目載入匯出的活動,請使用 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()
如以下範例所示,您可以在啟動的活動內擷取資訊方塊使用的 ID:
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
}
}
為您推薦
- 注意:系統會在 JavaScript 關閉時顯示連結文字
- 在 Wear OS 中建立第一個資訊方塊
- 遷移至 ProtoLayout 命名空間
- 在資訊方塊中顯示動態更新內容