إدخال البيانات عبر وحدة تحكُّم دورانية

تحتوي بعض أجهزة Wear OS على زر جانبي قابل للتدوير. عندما يحول المستخدم ينقل العرض الحالي لتطبيقك إلى الأعلى أو الأسفل. يسمى هذا النوع من الإدخال إدخال البيانات عبر وحدة تحكُّم دورانية.

ملاحظة: يشير هذا الدليل في المقام الأول إلى التعامل مع بيانات الإدخال عبر وحدة تحكُّم دورانية باستخدام واجهات المستخدم القائمة على العرض. لمزيد من المعلومات حول التعامل مع البيانات عبر وحدة تحكُّم دورانية باستخدام ميزة "إنشاء" في نظام Wear OS، يُرجى الاطّلاع على إدخال البيانات عبر وحدة تحكُّم دورانية في ميزة "إنشاء":

العديد من الحاويات القابلة للتمرير، مثل ScrollView, ListView, HorizontalScrollView, وWearableRecyclerView، دعم طريقة إدخال البيانات عبر وحدة تحكُّم دورانية إذا كانت لديهم تفاصيل بدون الحاجة إلى أجهزة Wear الرمز الخاص بنظام التشغيل. وهو شرط أساسي مهمّ، لأنّه في Android 9 (مستوى واجهة برمجة التطبيقات) 28) أو أعلى، لا يتم التركيز ضمنيًا على المشاهدات.

أفضل الممارسات للتركيز

للاستجابة إلى أحداث الإدخال بالتناوب، يجب التركيز على الحاوية القابلة للتمرير. لا تظهر أحداث الإدخال عبر الدوران فقاعات في العرض التسلسل الهرمي. وإذا لم تكن هناك طريقة عرض مركَّز عليها، أو إذا كانت طريقة العرض المركّزة تعرض false من View.onGenericMotionEvent(), فسيتم إرسال الحدث إلى Activity.onGenericMotionEvent()

في ما يلي أفضل الممارسات المتعلّقة بالاستجابة لأحداث الإدخال العشوائية:

  • ضع في اعتبارك أنه كإعداد افتراضي، يُعد بدء نشاط ما أو حتى النقر على إلا أن طريقة العرض لا تعطيه التركيز، حتى لو كانت يمكن التركيز عليه. للتركيز على طريقة العرض، يجب أن تستخدم طريقة العرض <requestFocus /> أو الاتصال يدويًا بـ View.requestFocus().
  • وضع علامة "قابلة للتركيز" على طرق العرض المخصّصة القابلة للتمرير باستخدام كل من "android:focusable="true"" وandroid:focusableInTouchMode="true".
  • إذا كان العرض القابل للتمرير مرفقًا بعد Activity.onCreate(): على سبيل المثال، انتظار انتهاء طلب الشبكة قبل إنشاء واجهة المستخدم، requestFocus() بعد الإرفاق.
  • إذا كان العرض القابل للتمرير هو INVISIBLE مبدئيًا أو GONE، طلب "requestFocus()" عند ضبطه على VISIBLE
  • إذا كان نشاطك يتضمّن عدة طرق عرض قابلة للتمرير، اختَر طريقة عرض للتركيز عليها باستخدام <requestFocus /> . لا تتوفّر إمكانية التمرير المدمَج مع الزر الجانبي الذي يتم تدويره.
  • إذا كانت واجهة المستخدم تحتوي على طرق عرض أخرى يتمّ التركيز عليها عندما ينقر المستخدم يتفاعل معها - على سبيل المثال، InputText، تمنح المستخدم طريقة لاستعادة التركيز إلى العرض القابل للتمرير عند فقدان التركيز من خلال الاستماع إلى النقرات على طريقة العرض القابلة للتمرير، ثم إجراء مكالمة ردّ requestFocus().

سلوك تبديل مخصّص

إذا كان العرض القابل للتمرير لا يتيح في الأصل تمرير الإدخال باستخدام وحدة تحكُّم دورانية، أو إذا كنت تريد استخدام طريقة إدخال البيانات عبر وحدة تحكُّم دورانية لشيء آخر غير التمرير، مثل التكبير والتصغير أو تدوير القرص - يمكنك التعامل مع أحداث التمرير نفسك. تذكر التأكد من أن العرض يكتسب التركيز، وإلا فلن يتم تنفيذ الأحداث.

يوضح مقتطف الرمز التالي طريقة استخدام MotionEvent InputDeviceCompat, وViewConfigurationCompat لإضافة تمرير مخصّص إلى العرض:

Kotlin

myView.setOnGenericMotionListener { v, ev ->
  if (ev.action == MotionEvent.ACTION_SCROLL &&
      ev.isFromSource(InputDeviceCompat.SOURCE_ROTARY_ENCODER)
  ) {
    // Don't forget the negation here
    val delta = -ev.getAxisValue(MotionEventCompat.AXIS_SCROLL) *
        ViewConfigurationCompat.getScaledVerticalScrollFactor(
             ViewConfiguration.get(context), context
        )
    // Swap these axes to scroll horizontally instead
    v.scrollBy(0, delta.roundToInt())
    true
  } else {
    false
  }
}

Java

myView.setOnGenericMotionListener(new View.OnGenericMotionListener() {
  @Override
  public boolean onGenericMotion(View v, MotionEvent ev) {
    if (ev.getAction() == MotionEvent.ACTION_SCROLL &&
        ev.isFromSource(InputDeviceCompat.SOURCE_ROTARY_ENCODER)
    ) {
      // Don't forget the negation here
      float delta = -ev.getAxisValue(MotionEventCompat.AXIS_SCROLL) *
          ViewConfigurationCompat.getScaledVerticalScrollFactor(
               ViewConfiguration.get(context), context
          );

      // Swap these axes to scroll horizontally instead
      v.scrollBy(0, Math.round(delta));

      return true;
    }
    return false;
  }
});

الاختبار باستخدام محاكي

استخدام محاكي Android لمحاكاة الإدخال عبر وحدة تحكُّم دورانية على جهاز Wear OS. افتح تطبيق Wear OS على المحاكي لتشغيله. مشروعك أو اسحب APK على المحاكي لتثبيته.

لاختبار الإدخال عبر وحدة تحكُّم دورانية على المحاكي:

  1. من مدير حزمة تطوير البرامج (SDK)، استخدِم علامة التبويب أدوات حزمة تطوير البرامج (SDK) من أجل الحصول على الإصدار 26.0.3 من Android Emulator أو إصدار أحدث.
  2. في "استوديو Android"، اختَر الأدوات >. Android > مدير AVD إنشاء جهاز Wear جديد مع واجهة برمجة التطبيقات 25 أو أعلى.
  3. ويمكنك تشغيل المحاكي من "استوديو Android".
  4. انقر على القائمة الكاملة للنقاط الثلاث أسفل شريط أدوات المحاكي. انقر على انقر على علامة تبويب إدخال البيانات عبر وحدة تحكُّم دورانية في النافذة الجديدة لفتح واجهة الإدخال الدوّارة وتجربة إدخال البيانات عبر وحدة تحكُّم دورانية. التمرير بين الإدخالات.

يعرض الفيديو التالي طريقة إدخال البيانات عبر وحدة تحكُّم دورانية في المحاكي: