การป้อนข้อมูลด้วยปุ่มหมุน

อุปกรณ์ Wear OS บางรุ่นมีปุ่มหมุนด้านข้าง เมื่อผู้ใช้หมุน ปุ่มนี้จะเลื่อนมุมมองปัจจุบันของแอปขึ้นหรือลง การป้อนข้อมูลประเภทนี้เรียกว่า การใส่ข้อมูลด้วยปุ่มหมุน

หมายเหตุ: คู่มือนี้พูดถึงการจัดการการป้อนข้อมูลด้วยปุ่มหมุนโดยใช้ UI ที่อิงตามการดู ดูข้อมูลเพิ่มเติมเกี่ยวกับการจัดการการป้อนข้อมูลด้วยปุ่มหมุนโดยใช้ Compose สำหรับ Wear OS ได้ที่ การป้อนข้อมูลด้วยปุ่มหมุนใน Compose

คอนเทนเนอร์ที่เลื่อนได้จำนวนมาก เช่น ScrollView, ListView, HorizontalScrollView, และ WearableRecyclerView รองรับการใส่ข้อมูลด้วยปุ่มหมุนหากกล้องโฟกัสได้โดยไม่ต้องใช้ Wear รหัสเฉพาะระบบปฏิบัติการ การมุ่งเน้นคือข้อกำหนดเบื้องต้นที่สำคัญ เพราะใน Android 9 (ระดับ API 28) และสูงกว่า การดูนั้นไม่ได้รับการเน้นโดยนัย

แนวทางปฏิบัติแนะนำสำหรับการโฟกัส

คอนเทนเนอร์แบบเลื่อนได้ต้องมีโฟกัสจึงจะตอบสนองต่อเหตุการณ์การป้อนข้อมูลแบบหมุนได้ กิจกรรมการป้อนข้อมูลแบบหมุนไม่แสดงขึ้นในมุมมอง ลำดับชั้น หากไม่มีมุมมองที่โฟกัส หรือหากมุมมองที่โฟกัสแสดงผล false จาก View.onGenericMotionEvent(), ระบบจะส่งเหตุการณ์ไปที่ Activity.onGenericMotionEvent()

แนวทางปฏิบัติแนะนำเกี่ยวกับการตอบสนองต่อเหตุการณ์การป้อนข้อมูลด้วยปุ่มหมุนมีดังนี้

  • โปรดทราบว่า โดยค่าเริ่มต้น การเปิดใช้งานกิจกรรมหรือแม้กระทั่งการแตะ ก็ไม่ได้ทำให้มุมมองใดๆ แม้ว่าจะเป็น โฟกัสได้ ในการโฟกัสมุมมอง มุมมองต้องใช้ <requestFocus /> แท็กหรือเรียก View.requestFocus() ด้วยตนเอง
  • ทำเครื่องหมายมุมมองที่เลื่อนได้ที่กำหนดเองว่าโฟกัสได้โดยใช้ทั้ง android:focusable="true" และ android:focusableInTouchMode="true"
  • หากมีการรวมมุมมองที่เลื่อนได้หลังวันที่ Activity.onCreate() ตัวอย่างเช่น ตัวอย่างเช่น รอให้คำขอเครือข่ายเสร็จสิ้นก่อนที่จะสร้าง UI ของคุณ เรียก requestFocus()หลังจากแนบไฟล์
  • หากมุมมองที่เลื่อนได้ของคุณคือ INVISIBLE หรือ GONE โทรหา requestFocus() เมื่อคุณตั้งค่าเป็น VISIBLE
  • หากกิจกรรมมีมุมมองที่เลื่อนได้หลายมุมมอง ให้เลือก 1 มุมมองที่ต้องการโฟกัสโดยใช้ <requestFocus /> แท็ก การเลื่อนแบบซ้อนไม่รองรับปุ่มด้านข้างแบบหมุน
  • หาก UI ของคุณมีมุมมองอื่นที่โฟกัสเมื่อผู้ใช้ จะโต้ตอบกับแท็กนั้น เช่น 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 เปิดแอป Wear ในโปรแกรมจำลองเพื่อเรียกใช้ โปรเจ็กต์ของคุณหรือลาก ไฟล์ APK ลงในโปรแกรมจำลองเพื่อติดตั้ง

หากต้องการทดสอบการใส่ข้อมูลด้วยปุ่มหมุนในโปรแกรมจำลอง ให้ทำดังนี้

  1. จากเครื่องมือจัดการ SDK ให้ใช้แท็บเครื่องมือ SDK เพื่อ รับ Android Emulator 26.0.3 ขึ้นไป
  2. ใน Android Studio เลือกเครื่องมือ > Android > AVD Manager สร้างอุปกรณ์ Wear ใหม่ด้วย API 25 หรือ สูงขึ้น
  3. เรียกใช้โปรแกรมจำลองจาก Android Studio
  4. คลิกเมนูรายการเพิ่มเติม 3 จุดที่ด้านล่างของแถบเครื่องมือโปรแกรมจำลอง คลิก แท็บการป้อนข้อมูลด้วยปุ่มหมุนในหน้าต่างใหม่เพื่อเปิดอินเทอร์เฟซการใส่ข้อมูลด้วยปุ่มหมุนและลองใช้ปุ่มหมุน การเลื่อนอินพุต

วิดีโอต่อไปนี้แสดงการใส่ข้อมูลด้วยปุ่มหมุนในตัวจำลอง