รองรับการไปยังส่วนต่างๆ ด้วยแป้นพิมพ์

ลองใช้วิธีแบบ Compose
Jetpack Compose เป็นชุดเครื่องมือ UI ที่แนะนำสำหรับ Android ดูวิธีใช้การสัมผัสและการป้อนข้อมูลใน Compose

นอกจากวิธีการป้อนข้อมูลแบบซอฟต์แวร์ เช่น แป้นพิมพ์บนหน้าจอ Android ยังรองรับแป้นพิมพ์จริงที่เชื่อมต่อกับอุปกรณ์ด้วย แป้นพิมพ์เป็นโหมดที่สะดวกสำหรับการป้อนข้อความและเป็นวิธีให้ผู้ใช้ ไปยังส่วนต่างๆ และโต้ตอบกับแอปของคุณ แม้ว่าอุปกรณ์ถือด้วยมือส่วนใหญ่ เช่น โทรศัพท์ จะใช้การสัมผัสเป็นโหมดการโต้ตอบหลัก แต่แท็บเล็ตและอุปกรณ์ที่คล้ายกัน ก็ได้รับความนิยม และผู้ใช้จำนวนมากชอบติดอุปกรณ์เสริมแป้นพิมพ์กับ อุปกรณ์เหล่านั้น

เมื่ออุปกรณ์ที่ใช้ Android จำนวนมากขึ้นมอบประสบการณ์การใช้งานแบบนี้ คุณจึงควรเพิ่มประสิทธิภาพแอปให้รองรับการโต้ตอบผ่านแป้นพิมพ์ เอกสารนี้อธิบายวิธีปรับปรุงการไปยังส่วนต่างๆ ด้วยแป้นพิมพ์

ทดสอบแอป

ผู้ใช้อาจไปยังส่วนต่างๆ ของแอปได้โดยใช้แป้นพิมพ์อยู่แล้ว เนื่องจากระบบ Android เปิดใช้ลักษณะการทำงานที่จำเป็นส่วนใหญ่โดยค่าเริ่มต้น

วิดเจ็ตแบบอินเทอร์แอกทีฟทั้งหมดที่เฟรมเวิร์ก Android มีให้ เช่น Button และ EditText จะ โฟกัสได้ ซึ่งหมายความว่าผู้ใช้จะไปยังส่วนต่างๆ ได้ด้วยอุปกรณ์ควบคุม เช่น D-pad หรือ แป้นพิมพ์ และวิดเจ็ตแต่ละรายการจะสว่างขึ้นหรือเปลี่ยนลักษณะที่ปรากฏเมื่อ ได้รับโฟกัสอินพุต

หากต้องการทดสอบแอป ให้ทำตามขั้นตอนต่อไปนี้

  1. ติดตั้งแอปในอุปกรณ์ที่มีแป้นพิมพ์ฮาร์ดแวร์

    หากไม่มีอุปกรณ์ฮาร์ดแวร์ที่มีแป้นพิมพ์ ให้เชื่อมต่อแป้นพิมพ์บลูทูธ หรือแป้นพิมพ์ USB

    นอกจากนี้ คุณยังใช้โปรแกรมจำลอง Android ได้ด้วย โดยทำดังนี้

    1. ใน AVD Manager ให้คลิกอุปกรณ์ใหม่หรือเลือก โปรไฟล์ที่มีอยู่ แล้วคลิกโคลน
    2. ในหน้าต่างที่ปรากฏขึ้น ให้ตรวจสอบว่าได้เปิดใช้แป้นพิมพ์และปุ่มบังคับทิศทางแล้ว
  2. หากต้องการทดสอบแอป ให้ใช้เฉพาะแป้น Tab เพื่อไปยังส่วนต่างๆ ของ UI ตรวจสอบให้แน่ใจว่าตัวควบคุม UI แต่ละรายการได้รับโฟกัสตามที่คาดไว้

    มองหากรณีที่โฟกัสเลื่อนไปในลักษณะที่ไม่คาดคิด

  3. เริ่มอีกครั้งตั้งแต่ต้นของแอปและไปยังส่วนต่างๆ ของ UI โดยใช้ตัวควบคุมทิศทาง เช่น แป้นลูกศรบนแป้นพิมพ์ จากองค์ประกอบที่โฟกัสได้แต่ละรายการใน UI ให้กดขึ้น ลง ซ้าย และขวา

    มองหากรณีที่โฟกัสเลื่อนไปในลักษณะที่ไม่คาดคิด

หากพบกรณีที่การไปยังส่วนต่างๆ ด้วยปุ่ม Tab หรือตัวควบคุมทิศทางไม่ทำงานตามที่คาดไว้ ให้ระบุตำแหน่งที่โฟกัสต้อง อยู่ในเลย์เอาต์ตามที่อธิบายไว้ในส่วนต่อไปนี้

จัดการการไปยังส่วนต่างๆ ในแท็บ

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

ตัวอย่างเช่น ในเลย์เอาต์ต่อไปนี้ ปุ่ม 2 ปุ่มจะจัดแนวไปทางด้านขวา และช่องข้อความจะจัดแนวไปทางด้านซ้ายของปุ่มที่ 2 หากต้องการส่งต่อโฟกัสจากปุ่มแรกไปยังช่องข้อความ แล้วไปยังปุ่มที่ 2 เลย์เอาต์จะต้องกำหนดลำดับโฟกัสอย่างชัดเจนสำหรับองค์ประกอบที่โฟกัสได้แต่ละรายการด้วยแอตทริบิวต์ android:nextFocusForward

<androidx.constraintlayout.widget.ConstraintLayout ...>
    <Button
        android:id="@+id/button1"
        android:nextFocusForward="@+id/editText1"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        ... />
    <Button
        android:id="@+id/button2"
        android:nextFocusForward="@+id/button1"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@id/button1"
        ... />
    <EditText
        android:id="@id/editText1"
        android:nextFocusForward="@+id/button2"
        app:layout_constraintBottom_toBottomOf="@+id/button2"
        app:layout_constraintRight_toLeftOf="@id/button2
        ...  />
    ...
</androidx.constraintlayout.widget.ConstraintLayout>

ตอนนี้แทนที่จะย้ายโฟกัสจาก button1 ไปยัง button2 แล้วจึงไปที่ editText1 ระบบจะย้ายโฟกัสอย่างเหมาะสม ตามลักษณะที่ปรากฏบนหน้าจอ นั่นคือจาก button1 ไปยัง editText1 แล้วจึงไปที่ button2

จัดการการนำทางตามทิศทาง

นอกจากนี้ ผู้ใช้ยังไปยังส่วนต่างๆ ของแอปได้โดยใช้แป้นลูกศรบนแป้นพิมพ์ ซึ่ง จะทำงานเหมือนกับการไปยังส่วนต่างๆ ด้วย D-pad หรือแทร็กบอล ระบบ จะ "คาดเดา" ว่าควรโฟกัสที่มุมมองใดในทิศทางที่กำหนด โดยอิงตามเลย์เอาต์ของมุมมองบนหน้าจอ อย่างไรก็ตาม บางครั้งระบบ อาจคาดเดาผิด

หากระบบไม่ส่งโฟกัสไปยังมุมมองที่เหมาะสมเมื่อไปยังส่วนต่างๆ ในทิศทางที่กำหนด ให้ระบุมุมมองที่ต้องรับโฟกัสด้วยแอตทริบิวต์ต่อไปนี้

แอตทริบิวต์แต่ละรายการจะกําหนดมุมมองถัดไปที่จะรับโฟกัสเมื่อผู้ใช้ ไปยังทิศทางนั้นตามที่ระบุโดยรหัสมุมมอง ซึ่งแสดงใน ตัวอย่างต่อไปนี้

<Button
    android:id="@+id/button1"
    android:nextFocusRight="@+id/button2"
    android:nextFocusDown="@+id/editText1"
    ... />
<Button
    android:id="@id/button2"
    android:nextFocusLeft="@id/button1"
    android:nextFocusDown="@id/editText1"
    ... />
<EditText
    android:id="@id/editText1"
    android:nextFocusUp="@id/button1"
    ...  />

แหล่งข้อมูลเพิ่มเติม

โปรดดูแหล่งข้อมูลที่เกี่ยวข้องต่อไปนี้