ไฟล์เลย์เอาต์หลัก (.kl
ไฟล์) แมปโค้ดคีย์และรหัสแกน Linux
และรหัสคีย์ Android และระบุแฟล็กนโยบายที่เกี่ยวข้อง
ไฟล์เลย์เอาต์คีย์เฉพาะอุปกรณ์มีดังนี้
- จำเป็นสำหรับอุปกรณ์อินพุตภายใน (ในตัว) ที่มีคีย์ ซึ่งรวมถึง แป้นพิเศษ เช่น แป้นปรับระดับเสียง แป้นเปิด/ปิด และแป้นสื่อชุดหูฟัง
- ไม่บังคับสำหรับอุปกรณ์อินพุตอื่นๆ แต่แนะนำสำหรับ แป้นพิมพ์และจอยสติ๊กสำหรับวัตถุประสงค์พิเศษ
หากไม่มีไฟล์เลย์เอาต์คีย์เฉพาะอุปกรณ์ ระบบจะเลือก เป็นค่าเริ่มต้นแทน
ตำแหน่ง
ไฟล์คีย์เลย์เอาต์อยู่โดยผู้ให้บริการ USB, ผลิตภัณฑ์ (และเวอร์ชันที่ไม่บังคับ) รหัสหรือตามชื่ออุปกรณ์อินพุต เราจะพิจารณาเส้นทางต่อไปนี้ตามลำดับ
/odm/usr/keylayout/Vendor_XXXX_Product_XXXX_Version_XXXX.kl
/vendor/usr/keylayout/Vendor_XXXX_Product_XXXX_Version_XXXX.kl
/system/usr/keylayout/Vendor_XXXX_Product_XXXX_Version_XXXX.kl
/data/system/devices/keylayout/Vendor_XXXX_Product_XXXX_Version_XXXX.kl
/odm/usr/keylayout/Vendor_XXXX_Product_XXXX.kl
/vendor/usr/keylayout/Vendor_XXXX_Product_XXXX.kl
/system/usr/keylayout/Vendor_XXXX_Product_XXXX.kl
/data/system/devices/keylayout/Vendor_XXXX_Product_XXXX.kl
/odm/usr/keylayout/DEVICE_NAME.kl
/vendor/usr/keylayout/DEVICE_NAME.kl
/system/usr/keylayout/DEVICE_NAME.kl
/data/system/devices/keylayout/DEVICE_NAME.kl
/odm/usr/keylayout/Generic.kl
/vendor/usr/keylayout/Generic.kl
/system/usr/keylayout/Generic.kl
/data/system/devices/keylayout/Generic.kl
เมื่อสร้างเส้นทางไฟล์ที่มีชื่ออุปกรณ์ อักขระทุกตัว ในชื่ออุปกรณ์อื่นที่ไม่ใช่ "0"-'9', "a"-'z' 'A'-'Z', '-' หรือ '_' แทนที่ด้วย "_"
ไฟล์รูปแบบคีย์ทั่วไป
ระบบจะให้ไฟล์รูปแบบคีย์ทั่วไปในตัวแบบพิเศษชื่อ
Generic.kl
เลย์เอาต์หลักนี้มีไว้เพื่อสนับสนุน
แป้นพิมพ์ภายนอกและจอยสติ๊กมาตรฐาน อย่าแก้ไขคีย์ทั่วไป
เลย์เอาต์
วากยสัมพันธ์
ไฟล์เลย์เอาต์คีย์คือไฟล์ข้อความธรรมดาที่ประกอบด้วยการประกาศคีย์หรือแกน และแฟล็ก
การประกาศคีย์
การประกาศคีย์ประกอบด้วยคีย์เวิร์ด key
ตามด้วย Linux
หมายเลขรหัสคีย์และชื่อรหัสคีย์ Android หรือการใช้คีย์เวิร์ดตามด้วย
การใช้งาน HID และชื่อรหัสคีย์ Android การใช้งาน HID จะแสดงเป็น 32 บิต
จำนวนเต็ม โดยค่า 16 บิตที่สูงจะแสดงหน้าการใช้งาน HID และ 16 บิตระดับต่ำ
แสดงรหัสการใช้งาน HID อาจมีการประกาศที่ไม่บังคับ
ชุดของ Flag นโยบายที่คั่นด้วยช่องว่าง
key 1 ESCAPE key 114 VOLUME_DOWN key 16 Q VIRTUAL key usage 0x0c006F BRIGHTNESS_UP
ทราบถึงแฟล็กนโยบายต่อไปนี้
FUNCTION
: ระบบควรตีความคีย์นี้ว่าเป็นคีย์ FUNCTION ก็มีคนกดดันเช่นกันGESTURE
: คีย์ที่สร้างขึ้นโดยท่าทางสัมผัสของผู้ใช้ เช่น การฝ่ามือ หน้าจอสัมผัสVIRTUAL
: คีย์เป็นซอฟต์คีย์เสมือน (ปุ่มแบบ Capacitive) ที่อยู่ติดกับหน้าจอสัมผัสหลัก ซึ่งจะทําให้ตรรกะการดีเบี่ยงเบนพิเศษ เปิดใช้งานอยู่ (ดูด้านล่าง)
การประกาศแกน
การประกาศแกนแต่ละรายการประกอบด้วยคีย์เวิร์ด axis
ตามด้วย
หมายเลขรหัสแกน Linux และตัวระบุที่ควบคุมลักษณะการทำงานของแกน
รวมชื่อรหัสแกน Android อย่างน้อย 1 ชื่อ
แกนพื้นฐาน
แกนพื้นฐานจะแมปโค้ดแกน Linux กับชื่อรหัสแกน Android
แมปการประกาศต่อไปนี้ ABS_X
(ระบุโดย 0x00
)
ไปยัง AXIS_X
(ระบุโดย X
)
axis 0x00 X
ในตัวอย่างด้านบน หากค่าของ ABS_X
คือ 5
ระบบจะตั้งค่า AXIS_X
เป็น 5
แกนแยก
แกนแบบแยกจะแมปโค้ดแกน Linux กับชื่อรหัสแกน Android 2 ชื่อ ซึ่งทำให้ ค่าที่น้อยกว่าหรือมากกว่าเกณฑ์จะถูกแบ่งออกเป็น 2 แกน เมื่อทำแผนที่แล้ว การแมปนี้มีประโยชน์เมื่อมีแกนทางกายภาพเดียวที่รายงานโดย อุปกรณ์จะเข้ารหัสแกนตรรกะ 2 แกนที่แตกต่างกันพร้อมกัน
การประกาศต่อไปนี้จะจับคู่ค่าของแกน ABS_Y
(ระบุโดย 0x01
) เป็น AXIS_GAS
เมื่อน้อยกว่า
0x7f
หรือ AXIS_BRAKE
เมื่อมากกว่า
0x7f
axis 0x01 split 0x7f GAS BRAKE
ในตัวอย่างด้านบน หากค่าของ ABS_Y
คือ 0x7d
จากนั้น AXIS_GAS
ได้รับการตั้งค่าเป็น 2
(0x7f - 0x7d
)
และ AXIS_BRAKE
ตั้งค่าเป็น 0
ในทางกลับกัน หากค่า
ของ ABS_Y
มีค่าเป็น 0x83
แล้วตั้งค่า AXIS_GAS
เป็น
ตั้งค่า 0
และ AXIS_BRAKE
เป็น 4
(0x83 - 0x7f
) สุดท้าย หากค่าของ ABS_Y
เท่ากับ
ค่าแบ่งของ 0x7f
ตามด้วยทั้ง AXIS_GAS
และ
ตั้งค่า AXIS_BRAKE
เป็น 0
แกนกลับสี
แกนที่กลับด้านจะกลับสัญลักษณ์ของค่าแกน ดังต่อไปนี้
แมปการประกาศ ABS_RZ
(ระบุโดย 0x05
) กับ
AXIS_BRAKE
(ระบุโดย BRAKE
) และกลับค่า
โดยลบเครื่องหมายนั้น
axis 0x05 invert BRAKE
ในตัวอย่างด้านบน หากค่าของ ABS_RZ
คือ 2
ระบบจะตั้งค่า AXIS_BRAKE
เป็น -2
ตัวเลือกกึ่งกลางแฟลต
อุปกรณ์จอยสติ๊กอาจรายงานเหตุการณ์อินพุตแม้ในขณะที่ไม่ได้ใช้จอยสติ๊กเนื่องจากมีเสียงรบกวน เสียงนี้มักมาจากแท่งด้านซ้ายและ/หรือขวา ซึ่งทำให้ผู้ขับขี่รายงาน ค่าตำแหน่งที่ใกล้เคียง 0 "แนวราบตรงกลาง" จะระบุปริมาณเสียงรบกวนที่คาดว่าจะได้รับจากตัวควบคุมที่ไม่มีการเคลื่อนไหว
โปรโตคอลอินพุตของ Linux จะให้วิธีที่ไดรเวอร์อุปกรณ์อินพุตระบุ
ค่าคงที่ตรงกลางของแกนจอยสติ๊ก แต่มีเพียงไดรเวอร์บางรายเท่านั้นที่รายงาน และบางคันมี
ค่าไม่ถูกต้อง ในการแก้ไขปัญหานี้ การประกาศแกนอาจตามด้วย
ตัวเลือก flat
ที่ระบุความกว้างของพื้นที่รอบๆ กึ่งกลาง
ตำแหน่งของแกนที่ควรถือว่าเป็นกึ่งกลาง
ตัวอย่างเช่น หากไดรเวอร์ของอุปกรณ์รายงานค่าสำหรับ AXIS_X
ระหว่าง 0 ถึง 100
แล้ว 0 จะจับคู่กับ -1 และระบบอินพุตของ Android จะแมป 100 กับ 1
จุดศูนย์กลางของช่วงจะเป็น 50 ในพิกัดที่ไม่ได้ปรับขนาด และ 0 ในพิกัดที่ปรับขนาด
หากค่าคงที่เท่ากับ 10
นักพัฒนาซอฟต์แวร์ควรคิดว่าค่า AXIS_X
ที่รายงานระหว่าง
-0.1 ถึง 0.1 (ระหว่าง 40 ถึง 60 ในพิกัดที่ไม่ปรับสเกล) คือนอยส์ และถือว่าค่าเหล่านี้กำลังมา
จากจอยสติ๊กเป็น 0
หมายเหตุ: ขณะที่ไฟล์เลย์เอาต์คีย์ระบุค่า สำหรับพื้นที่พิกัดคนขับ ค่าที่ android.view.InputDevice.MotionRange#getFlat() รายงานอยู่ใน Android พิกัด
axis 0x03 Z flat 4096
ในตัวอย่างด้านบน ค่าศูนย์กลางแบบแฟลตได้รับการตั้งค่าเป็น 4096
ความคิดเห็น
บรรทัดความคิดเห็นจะขึ้นต้นด้วย # แล้วไปจนสุดบรรทัด
# A comment!
ระบบจะไม่สนใจบรรทัดว่าง
ตัวอย่าง
แป้นพิมพ์
# This is an example of a key layout file for a keyboard. key 1 ESCAPE key 2 1 key 3 2 key 4 3 key 5 4 key 6 5 key 7 6 key 8 7 key 9 8 key 10 9 key 11 0 key 12 MINUS key 13 EQUALS key 14 DEL # etc...
การควบคุมระบบ
# This is an example of a key layout file for basic system controls, # such as volume and power keys which are typically implemented as GPIO pins # the device decodes into key presses. key 114 VOLUME_DOWN key 115 VOLUME_UP key 116 POWER
ปุ่มแบบคาปาซิทีฟ
# This is an example of a key layout file for a touch device with capacitive buttons. key 139 MENU VIRTUAL key 172 HOME VIRTUAL key 158 BACK VIRTUAL key 217 SEARCH VIRTUAL
การควบคุมสื่อสำหรับช่องเสียบชุดหูฟัง
# This is an example of a key layout file for headset mounted media controls. # A typical headset jack interface might have special control wires or detect known # resistive loads as corresponding to media functions or volume controls. # This file assumes that the driver decodes these signals and reports media # controls as key presses. key 163 MEDIA_NEXT key 165 MEDIA_PREVIOUS key 226 HEADSETHOOK
Joystick
# This is an example of a key layout file for a joystick. # These are the buttons that the joystick supports, represented as keys. key 304 BUTTON_A key 305 BUTTON_B key 307 BUTTON_X key 308 BUTTON_Y key 310 BUTTON_L1 key 311 BUTTON_R1 key 314 BUTTON_SELECT key 315 BUTTON_START key 316 BUTTON_MODE key 317 BUTTON_THUMBL key 318 BUTTON_THUMBR # Left and right stick. # The reported value for flat is 128 in a range of -32767 to 32768, which is absurd. # This confuses applications that rely on the flat value because the joystick # actually settles in a flat range of +/- 4096 or so. We override it here. axis 0x00 X flat 4096 axis 0x01 Y flat 4096 axis 0x03 Z flat 4096 axis 0x04 RZ flat 4096 # Triggers. axis 0x02 LTRIGGER axis 0x05 RTRIGGER # Hat. axis 0x10 HAT_X axis 0x11 HAT_Y
ซอฟต์คีย์เสมือน
ระบบอินพุตมีฟีเจอร์พิเศษสำหรับการใช้งานซอฟต์คีย์เสมือน ในกรณีการใช้งานต่อไปนี้
- หากซอฟต์คีย์เสมือนแสดงเป็นกราฟิกบนหน้าจอ (เช่น Galaxy Nexus) โดยจะใช้งานโดยคอมโพเนนต์แถบนำทางใน แพ็กเกจ UI ระบบ เนื่องจากมีการใช้ซอฟต์คีย์เสมือนแบบกราฟิกในระดับสูง ลงในระบบ ไฟล์เค้าโครงคีย์จะไม่มีส่วนเกี่ยวข้องใดๆ และ ไม่สามารถใช้ได้
- หากใช้งานซอฟต์คีย์เสมือนเป็นขอบเขตที่สัมผัสได้แบบขยาย
ที่เป็นส่วนหนึ่งของหน้าจอสัมผัสหลัก (เช่น บน Nexus One) อินพุต
ระบบใช้ไฟล์แผนที่แป้นเสมือนเพื่อแปลพิกัดการแตะ X/Y เป็น
จากนั้นใช้ไฟล์เลย์เอาต์คีย์เพื่อแปลโค้ดคีย์ Linux เป็น
รหัสคีย์ Android (โปรดดูรายละเอียดเกี่ยวกับไฟล์คีย์แมปเสมือนที่หัวข้อ
อุปกรณ์ระบบสัมผัส) ไฟล์คีย์เลย์เอาต์สำหรับ
อุปกรณ์อินพุตแบบหน้าจอสัมผัสต้องระบุการแมปคีย์ที่เหมาะสมและรวม
แฟล็ก
VIRTUAL
สำหรับแต่ละคีย์ - หากใช้งานซอฟต์คีย์เสมือนเป็นปุ่มแบบ Capacitive ที่แยกต่างหากจาก
หน้าจอสัมผัสหลัก (เช่น บน Nexus S) ไดรเวอร์อุปกรณ์เคอร์เนล หรือ
เฟิร์มแวร์มีหน้าที่แปลการสัมผัสเป็นโค้ดคีย์ Linux
จากนั้นระบบอินพุตจะแปลงเป็นโค้ดคีย์ Android โดยใช้ไฟล์การจัดวางคีย์
ไฟล์รูปแบบคีย์สำหรับอุปกรณ์อินพุตปุ่มแบบคาปาซิทีฟต้องระบุ
การแมปคีย์ที่เหมาะสมและรวม Flag
VIRTUAL
ของแต่ละคีย์
เมื่อซอฟต์คีย์เสมือนอยู่ภายในหรือในระยะใกล้ของ หน้าจอสัมผัส ผู้ใช้อาจกดปุ่มโดยไม่ตั้งใจได้ง่ายเมื่อ แตะบริเวณด้านล่างของหน้าจอหรือเมื่อเลื่อนนิ้วจากบนลงล่าง หรือ จากล่างขึ้นบนบนหน้าจอ เพื่อป้องกันปัญหานี้ ระบบป้อนข้อมูลจะใช้ การดีเบานซ์เพื่อไม่ให้การกดปุ่มซอฟต์คีย์เสมือนเป็นระยะเวลาสั้นๆ หลังจากการแตะครั้งล่าสุดบนหน้าจอสัมผัส (การหน่วงเวลานี้เรียกว่า Virtual Key Quiet Time)
หากต้องการเปิดใช้การดีเดือดจากซอฟต์คีย์เสมือน ให้ทำดังนี้
- จัดเตรียมไฟล์เลย์เอาต์คีย์สำหรับหน้าจอสัมผัสหรือปุ่มแบบ Capacitive
อุปกรณ์อินพุตที่มีการตั้งค่าแฟล็ก
VIRTUAL
สำหรับแต่ละคีย์key 139 MENU VIRTUAL key 172 HOME VIRTUAL key 158 BACK VIRTUAL key 217 SEARCH VIRTUAL
- ตั้งค่า Quiet Time ของคีย์เสมือนในการวางซ้อนทรัพยากรสำหรับ
ทรัพยากร
config.xml
ของเฟรมเวิร์ก<!-- Specifies the amount of time to disable virtual keys after the screen is touched to filter out accidental virtual key presses due to swiping gestures or taps near the edge of the display. May be 0 to disable the feature. It is recommended that this value be no more than 250 ms. This feature should be disabled for most devices. --> <integer name="config_virtualKeyQuietTimeMillis">250</integer>
การตรวจสอบความถูกต้อง
คุณควรตรวจสอบไฟล์เลย์เอาต์คีย์โดยใช้ เครื่องมือตรวจสอบคีย์แมป