Możesz jeszcze bardziej uatrakcyjnić działanie kafelków, ustawiając je w trybie interaktywnym. Dodając modyfikator Clickable
do elementu układu w kafelku, możesz zareagować na kliknięcie użytkownika przez użytkownika.
Ta strona zawiera kilka typowych działań, które użytkownicy wykonują na interaktywnych kafelkach, oraz wskazówki dotyczące implementacji tego działania w kafelkach aplikacji.
Wczytaj nowy układ kafelków
Użyj przycisku LoadAction
, aby odświeżyć układ kafelka, gdy użytkownik kliknie element interaktywny.
W poniższym fragmencie kodu klikalny identyfikator ustawiony w polu setId()
jest przekazywany do wywołania onTileRequest()
, więc na jego podstawie można wyrenderować inny układ:
override fun onTileRequest(requestParams: TileRequest) = Futures.immediateFuture(
Tile.Builder()
.setResourcesVersion("1")
.setTileTimeline(Timeline.fromLayoutElement(
when(requestParams.currentState.lastClickableId) {
"foo" -> myFooLayout()
else -> myOtherLayout()
}
)).build()
)
Zaktualizuj stan w kafelku
Jeśli element interaktywny w kafelku ma kilka możliwych stanów, użyj LoadAction
, aby wyświetlić nową wartość elementu. W poniższym fragmencie kodu kafelek przedstawia zaktualizowaną wartość pola wyboru:
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()
Poproś o odświeżenie zawartości kafelka
Aby poprosić o aktualizację całej zawartości kafelka, użyj polecenia LoadAction
i zaktualizuj stan żądania kafelka, jak pokazano poniżej.
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()
Wczytywanie aktywności za pomocą precyzyjnego linku
Aby wczytać aktywność za pomocą precyzyjnego linku, powiąż element, który można kliknąć, z obiektem 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()
Następnie w metodzie onTileRequest()
użyj obiektu TaskStackBuilder
jako pomocniczego:
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.
}
Wczytaj wyeksportowaną aktywność
Aby wczytać wyeksportowaną aktywność według nazwy zajęć i dodatków do intencji, użyj obiektu 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()
W ramach uruchomionej aktywności możesz pobrać identyfikator użyty dla kafelka, jak pokazano w tym przykładzie:
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
}
}
Polecane dla Ciebie
- Uwaga: tekst linku wyświetla się, gdy JavaScript jest wyłączony
- Tworzenie pierwszego kafelka w Wear OS
- Migracja do przestrzeni nazw ProtoLayout
- Pokazywanie aktualizacji dynamicznych w kafelkach