Kartları kullanma

Kart deneyiminizi etkileşimli hale getirerek daha iyi hale getirebilirsiniz. Karonun içindeki bir düzen öğesine Clickable değiştiricisini ekleyerek bu düzen öğesine dokunan bir kullanıcıya tepki verebilirsiniz.

Bu sayfada, kullanıcıların etkileşimli karolarda gerçekleştirdiği bazı yaygın işlemler ve bu davranışın uygulamanızın karolarında nasıl uygulanacağı açıklanmaktadır.

Yeni karo düzeni yükle

Kullanıcı etkileşimli bir öğeye dokunduğunda karonunuzun düzenini yenilemek için LoadAction özelliğini kullanın.

Aşağıdaki kod snippet'inde, setId() içinde ayarlanan tıklanabilir kimlik onTileRequest() çağrısına 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()
)

Karodaki durumu güncelle

Karonuzdaki etkileşimli bir öğenin birkaç olası durumu varsa öğenin yeni değerini göstermek için bir LoadAction kullanın. Aşağıdaki kod snippet'inde blok, 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()

Kart içeriğinin yenilenmesini isteyin

Karonun tüm içeriğinin güncellenmesini istemek için LoadAction kodunu 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 bir etkinlik yüklemek için tıklanabilir bir öğ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 etkinlikleri yükleme

Dışa aktarılan bir etkinliği 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 etkinlikten, aşağıdaki örnekte gösterildiği gibi karo 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
    }
}