Взаимодействуйте с плитками

Вы можете улучшить качество плитки, сделав ее интерактивной. Добавив модификатор 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
   
}
}
{% дословно %}

Пока рекомендаций нет.

Попытайтесь в свой аккаунт Google.

{% дословно %}