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