ใช้ท่าทางสัมผัสด้วยข้อมือใน Wear

ท่าทางสัมผัสด้วยข้อมือช่วยให้โต้ตอบกับแอปของคุณได้อย่างรวดเร็วโดยใช้มือเดียว เมื่อใช้งานหน้าจอสัมผัสได้ไม่สะดวก

เช่น ผู้ใช้สามารถเลื่อน ผ่านการแจ้งเตือนด้วยมือข้างเดียวขณะถือแก้วน้ำที่มี อื่นๆ กรณีการใช้งานอื่นๆ สำหรับการเคลื่อนไหวข้อมือมีดังนี้

  • ในแอปจ็อกกิ้ง การนำทางผ่านหน้าจอแนวตั้งที่แสดง จำนวนก้าว เวลาที่ผ่านไป และเพซปัจจุบัน
  • ในแอปท่องเที่ยว การเลื่อนดูข้อมูลเที่ยวบินและประตูทางออก
  • ในแอปข่าว การเลื่อนดูบทความ

วิธีตรวจสอบท่าทางสัมผัสด้วยข้อมือบนนาฬิกา อุปกรณ์ ให้ยืนยันว่าท่าทางสัมผัส เปิดโดยเลือกการตั้งค่า > ฟีเจอร์ขั้นสูง > ท่าทางสัมผัส > ท่าทางสัมผัสด้วยข้อมือ เปิด จากนั้นทำ บทแนะนำเกี่ยวกับท่าทางสัมผัสในนาฬิกาโดยเลือกเปิดบทแนะนำ

หมายเหตุ: การเขย่าข้อมือเป็นการถอยหลังหรือท่าทางสัมผัสสำหรับเลิกทำทั้งระบบ และไม่สามารถปรับแต่งแอปได้

ท่าทางสัมผัสด้วยข้อมือสามารถใช้ในลักษณะต่อไปนี้ได้ ดังที่อธิบายไว้ในคู่มือนี้

ท่าทางสัมผัสของข้อมือแต่ละอันจะจับคู่กับค่าคงที่ int จาก วันที่ KeyEvent ดังที่แสดงในตารางต่อไปนี้

ท่าทางสัมผัส เหตุการณ์สําคัญ คำอธิบาย
สะบัดข้อมือออก KEYCODE_NAVIGATE_NEXT รหัสคีย์นี้จะไปยังรายการถัดไป
สะบัดข้อมือเข้า KEYCODE_NAVIGATE_PREVIOUS รหัสคีย์นี้จะไปยังรายการก่อนหน้า

ใช้เลย์เอาต์แบบโค้งเพื่อรองรับท่าทางสัมผัสด้วยข้อมือ

คลาส WearableRecyclerView จะมีแผนภูมิโค้ง เลย์เอาต์สำหรับรายการและรองรับ ด้วยการเคลื่อนไหวข้อมือ คลาสมีการดำเนินการที่กำหนดไว้ล่วงหน้าสำหรับรายการ ท่าทางสัมผัสด้วยข้อมือเมื่อมุมมองมีโฟกัส สำหรับข้อมูลเกี่ยวกับการใช้ ชั้นเรียน WearableRecyclerView โปรดดูหัวข้อสร้างรายการใน Wear OS นอกจากนี้ โปรดดู ส่วนแนวทางปฏิบัติแนะนำของคู่มือนี้

หมายเหตุ: คลาส WearableRecyclerView จะแทนที่คลาส เลิกใช้งานในไลบรารีการสนับสนุนของอุปกรณ์สวมใส่แล้ว

แม้ว่าคุณจะใช้ WearableRecyclerView แต่คุณอาจต้องการใช้ ค่าคงที่จาก KeyEvent การดำเนินการที่กำหนดไว้ล่วงหน้าสามารถลบล้างได้ด้วยการแยกประเภทย่อย WearableRecyclerView และนำพารามิเตอร์ onKeyDown() Callback ปิดใช้ลักษณะการทำงานได้ทั้งหมด โดยใช้ setEnableGestureNavigation(false) สำหรับข้อมูลเพิ่มเติม โปรดดู จัดการการดำเนินการของแป้นพิมพ์

ใช้เหตุการณ์สําคัญโดยตรง

คุณสามารถใช้เหตุการณ์สำคัญภายนอก WearableRecyclerView เพื่อทริกเกอร์การดำเนินการใหม่ตามท่าทางสัมผัส กิจกรรม ที่สำคัญระบบจะจดจำเหตุการณ์ท่าทางสัมผัสเหล่านี้เมื่ออุปกรณ์อยู่ใน ทำงาน และจะแสดงในลักษณะเดียวกับเหตุการณ์สำคัญทั้งหมด

คลาสที่เกี่ยวข้องกับการโต้ตอบของผู้ใช้ เช่น View หรือ Activity และดำเนินการ KeyEvent.Callback สามารถฟังเหตุการณ์สําคัญที่เกี่ยวข้องกับ ท่าทางสัมผัสด้วยข้อมือเช่นเดียวกับที่แสดงต่อเหตุการณ์สำคัญอื่นๆ เฟรมเวิร์ก Android จะโทรหา View หรือ Activity ที่มี โฟกัสที่เหตุการณ์สําคัญ สำหรับท่าทางสัมผัส พารามิเตอร์ onKeyDown() ระบบจะเรียกเมธอด Callback เมื่อมีการท่าทางสัมผัสเกิดขึ้น

เช่น แอปลบล้างการดำเนินการที่กำหนดไว้ล่วงหน้าใน View ได้ หรือ Activity ที่ใช้ KeyEvent.Callback ดังนี้

Kotlin

class GesturesActivity : Activity() {

    /* KeyEvent.Callback */
    override fun onKeyDown(keyCode: Int, event: KeyEvent): Boolean {
        return when (keyCode) {
            KeyEvent.KEYCODE_NAVIGATE_NEXT ->
                // Do something that advances a user View to the next item in an ordered list.
                moveToNextItem()
            KeyEvent.KEYCODE_NAVIGATE_PREVIOUS ->
                // Do something that advances a user View to the previous item in an ordered list.
                moveToPreviousItem()
            else -> {
                // If you did not handle it, let it be handled by the next possible element as determined
                // by the Activity.
                super.onKeyDown(keyCode, event)
            }
        }
    }

    /** Shows the next item in the custom list.  */
    private fun moveToNextItem(): Boolean {
        ...
        // Return true if handled successfully, otherwise return false.
        return false
    }

    /** Shows the previous item in the custom list.  */
    private fun moveToPreviousItem(): Boolean {
        ...
        // Return true if handled successfully, otherwise return false.
        return false
    }
}

Java

public final class GesturesActivity extends Activity {

 @Override /* KeyEvent.Callback */
 public boolean onKeyDown(int keyCode, KeyEvent event) {
  switch (keyCode) {
   case KeyEvent.KEYCODE_NAVIGATE_NEXT:
    // Do something that advances a user View to the next item in an ordered list.
    return moveToNextItem();
   case KeyEvent.KEYCODE_NAVIGATE_PREVIOUS:
    // Do something that advances a user View to the previous item in an ordered list.
    return moveToPreviousItem();
  }
  // If you did not handle it, let it be handled by the next possible element as determined by the Activity.
  return super.onKeyDown(keyCode, event);
 }

 /** Shows the next item in the custom list. */
 private boolean moveToNextItem() {
  boolean handled = false;
  ...
  // Return true if handled successfully, otherwise return false.
  return handled;
 }

 /** Shows the previous item in the custom list. */
 private boolean moveToPreviousItem() {
  boolean handled = false;
  ...
  // Return true if handled successfully, otherwise return false.
  return handled;
 }
}

แนวทางปฏิบัติแนะนำ

  • ตรวจสอบ KeyEvent และหน้า KeyEvent.Callback สำหรับการแสดงเหตุการณ์สำคัญไปยัง View และ Activity ของคุณ
  • มีทิศทางที่สม่ำเสมอ: ใช้ "สะบัดข้อมือออก" สำหรับ ถัดไปและ "สะบัดข้อมือเข้า" สำหรับส่วนก่อนหน้า
  • แตะคู่ขนานเพื่อท่าทางสัมผัส
  • แสดงความคิดเห็นด้วยภาพ
  • อย่าใช้รหัสคีย์เพื่อใช้งานฟังก์ชันที่อาจ ใช้งานยากกับส่วนอื่นๆ ในระบบ ตัวอย่างเช่น อย่าใช้ KEYCODE_NAVIGATE_NEXT เพื่อยกเลิกการดำเนินการหรือไปยังส่วนต่างๆ แกนด้านซ้าย-ขวาที่มีการสะบัดนิ้ว
  • อย่าสกัดกั้นเหตุการณ์สำคัญในองค์ประกอบที่ไม่ได้เป็นส่วนหนึ่งของ อินเทอร์เฟซผู้ใช้ เช่น การดูนอกหน้าจอหรือบางส่วน ที่ครอบคลุม ซึ่งจะเหมือนกับเหตุการณ์สําคัญอื่นๆ
  • อย่าตีความท่าทางสัมผัสการสะบัดซ้ำๆ เป็นท่าทางสัมผัสแบบใหม่ ซึ่งอาจขัดแย้งกับ "การสั่นข้อมือ" ของระบบ ท่าทางสัมผัส
  • หากต้องการให้มุมมองรับเหตุการณ์สำคัญด้วยท่าทางสัมผัส จะต้องมี โฟกัส ดู View.setFocusable()

    เนื่องจากท่าทางสัมผัสถือเป็นเหตุการณ์สําคัญ อุปกรณ์จะทริกเกอร์การเปลี่ยนจาก "โหมดสัมผัส" ซึ่งอาจสร้างโดยไม่คาดคิด สิ่งต่างๆ เนื่องจากผู้ใช้อาจสลับใช้การแตะและ อาจจำเป็นต้องใช้เมธอด View::setFocusableInTouchmode() ในบางส่วน คุณยังอาจจำเป็นต้องใช้ setDescendantFocusability(FOCUS_BEFORE_DESCENDANTS) ดังนั้น เมื่อโฟกัสเปลี่ยนหลังจากเปลี่ยนเป็นหรือจากโหมดสัมผัส มุมมองที่ต้องการจะได้รับการโฟกัส

  • ใช้ requestFocus() และ วันที่ clearFocus() อย่างรอบคอบ:
    • เมื่อโทรหา requestFocus() โปรดตรวจสอบว่าเหมาะสมสำหรับ เพื่อให้มีสมาธิ หากมุมมองอยู่นอกหน้าจอหรือถูกบังด้วยมุมมองอื่น ซึ่งอาจเกิดขึ้นเมื่อท่าทางสัมผัสทำให้เกิด Callback
    • เมธอด clearFocus() จะเริ่มการค้นหาโฟกัสเพื่อค้นหารายการอื่น มุมมองที่เหมาะสม การค้นหานี้อาจ ต้องใช้การคำนวณที่ไม่สำคัญ และสุดท้ายยังอาจเป็นการกำหนดจุดโฟกัส มุมมองที่คุณไม่คาดว่าจะมีคนสนใจ
  • ระบบจะส่งเหตุการณ์สําคัญไปยังข้อมูลพร็อพเพอร์ตี้ก่อนโดยโฟกัสอยู่ในมุมมอง ลำดับชั้น หากมุมมองที่โฟกัสจัดการกิจกรรมไม่ได้ กล่าวคือ จะแสดง false - ระบบจะไม่ส่งกิจกรรมไปยังมุมมองระดับบนสุด รับโฟกัสได้และมี KeyListener หรือไม่ แต่ระบบจะส่งเหตุการณ์ไปที่กิจกรรมปัจจุบันแทน มีลำดับชั้นการแสดงผลโดยมีโฟกัสอยู่

    ดังนั้น เราจึงอาจจำเป็นต้อง ตรวจจับเหตุการณ์ทั้งหมดในระดับที่สูงขึ้น แล้วส่งรหัสที่เกี่ยวข้องลงไป อีกทางเลือกหนึ่งคือ คุณอาจจัดประเภทย่อยกิจกรรมและลบล้าง เมธอด dispatchKeyEvent(KeyEvent event) ในการสกัดกั้นคีย์ เมื่อจำเป็น หรือจัดการเมื่อไม่ได้จัดการ ด้านล่าง