นอกจากวิธีการป้อนข้อมูลแบบซอฟต์แวร์ เช่น แป้นพิมพ์บนหน้าจอ Android ยังรองรับแป้นพิมพ์จริงที่เชื่อมต่อกับอุปกรณ์ด้วย แป้นพิมพ์เป็นโหมดที่สะดวกสำหรับการป้อนข้อความและเป็นวิธีให้ผู้ใช้ ไปยังส่วนต่างๆ และโต้ตอบกับแอปของคุณ แม้ว่าอุปกรณ์ถือด้วยมือส่วนใหญ่ เช่น โทรศัพท์ จะใช้การสัมผัสเป็นโหมดการโต้ตอบหลัก แต่แท็บเล็ตและอุปกรณ์ที่คล้ายกัน ก็ได้รับความนิยม และผู้ใช้จำนวนมากชอบติดอุปกรณ์เสริมแป้นพิมพ์กับ อุปกรณ์เหล่านั้น
เมื่ออุปกรณ์ที่ใช้ Android จำนวนมากขึ้นมอบประสบการณ์การใช้งานแบบนี้ คุณจึงควรเพิ่มประสิทธิภาพแอปให้รองรับการโต้ตอบผ่านแป้นพิมพ์ เอกสารนี้อธิบายวิธีปรับปรุงการไปยังส่วนต่างๆ ด้วยแป้นพิมพ์
ทดสอบแอป
ผู้ใช้อาจไปยังส่วนต่างๆ ของแอปได้โดยใช้แป้นพิมพ์อยู่แล้ว เนื่องจากระบบ Android เปิดใช้ลักษณะการทำงานที่จำเป็นส่วนใหญ่โดยค่าเริ่มต้น
วิดเจ็ตแบบอินเทอร์แอกทีฟทั้งหมดที่เฟรมเวิร์ก Android มีให้ เช่น
Button และ
EditText จะ
โฟกัสได้ ซึ่งหมายความว่าผู้ใช้จะไปยังส่วนต่างๆ ได้ด้วยอุปกรณ์ควบคุม เช่น D-pad หรือ
แป้นพิมพ์ และวิดเจ็ตแต่ละรายการจะสว่างขึ้นหรือเปลี่ยนลักษณะที่ปรากฏเมื่อ
ได้รับโฟกัสอินพุต
หากต้องการทดสอบแอป ให้ทำตามขั้นตอนต่อไปนี้
- ติดตั้งแอปในอุปกรณ์ที่มีแป้นพิมพ์ฮาร์ดแวร์
หากไม่มีอุปกรณ์ฮาร์ดแวร์ที่มีแป้นพิมพ์ ให้เชื่อมต่อแป้นพิมพ์บลูทูธ หรือแป้นพิมพ์ USB
นอกจากนี้ คุณยังใช้โปรแกรมจำลอง Android ได้ด้วย โดยทำดังนี้
- ใน AVD Manager ให้คลิกอุปกรณ์ใหม่หรือเลือก โปรไฟล์ที่มีอยู่ แล้วคลิกโคลน
- ในหน้าต่างที่ปรากฏขึ้น ให้ตรวจสอบว่าได้เปิดใช้แป้นพิมพ์และปุ่มบังคับทิศทางแล้ว
- หากต้องการทดสอบแอป ให้ใช้เฉพาะแป้น Tab เพื่อไปยังส่วนต่างๆ ของ UI
ตรวจสอบให้แน่ใจว่าตัวควบคุม UI แต่ละรายการได้รับโฟกัสตามที่คาดไว้
มองหากรณีที่โฟกัสเลื่อนไปในลักษณะที่ไม่คาดคิด
- เริ่มอีกครั้งตั้งแต่ต้นของแอปและไปยังส่วนต่างๆ ของ 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" ... />
แหล่งข้อมูลเพิ่มเติม
โปรดดูแหล่งข้อมูลที่เกี่ยวข้องต่อไปนี้