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

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

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

ทดสอบแอป

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

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

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

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

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

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

    1. ในเครื่องมือจัดการ AVD ให้คลิกอุปกรณ์ใหม่หรือเลือกโปรไฟล์ที่มีอยู่ แล้วคลิกโคลน
    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 ไปยัง editText1 แล้วไปยัง button2 แทนที่จะย้ายจาก button1 ไปยัง button2 แล้วไปยัง editText1

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

นอกจากนี้ ผู้ใช้ยังไปยังส่วนต่างๆ ของแอปได้โดยใช้แป้นลูกศรบนแป้นพิมพ์ ซึ่งจะทำงานเหมือนกับการไปยังส่วนต่างๆ ด้วยปุ่ม 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"
    ...  />

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

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