التفاعل مع الشاشات

يمكنك تعزيز تجربة استخدام شاشات المعلومات بجعلها تفاعلية. من خلال إضافة مفتاح التعديل 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
    }
}