Вы можете улучшить качество плитки, сделав ее интерактивной. Добавив модификатор Clickable
к элементу макета на плитке, вы можете реагировать на касание пользователем этого элемента макета.
На этой странице перечислено несколько распространенных действий, которые пользователи выполняют на интерактивных плитках, а также инструкции по реализации этого поведения на плитках вашего приложения.
Загрузить новый макет плитки
Используйте LoadAction
, чтобы обновить макет плитки, когда пользователь касается интерактивного элемента.
В следующем фрагменте кода кликабельный идентификатор, установленный в setId()
передается вызову onTileRequest()
, поэтому вы можете визуализировать другой макет на основе этого идентификатора:
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()
Внутри запущенного действия вы можете получить идентификатор, который использовался для плитки, как показано в следующем примере:
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
- Показывать динамические обновления в плитках