ไฟล์การแมปอักขระของแป้นพิมพ์ (ไฟล์ .kcm
) มีหน้าที่รับผิดชอบในการแมปชุดค่าผสมของรหัสแป้น Android กับตัวหลีกไปยังอักขระ Unicode
ต้องระบุไฟล์เลย์เอาต์แป้นเฉพาะอุปกรณ์สำหรับอุปกรณ์อินพุตภายใน (ในตัว) ทั้งหมดที่มีแป้น เพื่อบอกให้ระบบทราบว่าอุปกรณ์มีไว้เพื่อวัตถุประสงค์พิเศษเท่านั้น (ไม่ใช่แป้นพิมพ์แบบเต็ม)
ไฟล์เลย์เอาต์แป้นพิมพ์เฉพาะอุปกรณ์เป็นไฟล์ที่ไม่บังคับสำหรับแป้นพิมพ์ภายนอก และมักไม่จำเป็นเลย ระบบมีแผนที่อักขระแป้นพิมพ์ทั่วไปที่เหมาะสำหรับแป้นพิมพ์ภายนอกหลายรุ่น
หากไม่มีไฟล์เลย์เอาต์แป้นเฉพาะอุปกรณ์ ระบบจะเลือกค่าเริ่มต้นแทน
ตำแหน่ง
ไฟล์การแมปอักขระของแป้นพิมพ์จะอยู่ที่รหัสผู้ให้บริการ USB, ผลิตภัณฑ์ (และเวอร์ชัน) หรือตามชื่ออุปกรณ์อินพุต
ระบบจะปรึกษาเส้นทางต่อไปนี้ตามลำดับ
/odm/usr/keychars/Vendor_XXXX_Product_XXXX_Version_XXXX.kcm
/vendor/usr/keychars/Vendor_XXXX_Product_XXXX_Version_XXXX.kcm
/system/usr/keychars/Vendor_XXXX_Product_XXXX_Version_XXXX.kcm
/data/system/devices/keychars/Vendor_XXXX_Product_XXXX_Version_XXXX.kcm
/odm/usr/keychars/Vendor_XXXX_Product_XXXX.kcm
/vendor/usr/keychars/Vendor_XXXX_Product_XXXX.kcm
/system/usr/keychars/Vendor_XXXX_Product_XXXX.kcm
/data/system/devices/keychars/Vendor_XXXX_Product_XXXX.kcm
/odm/usr/keychars/DEVICE_NAME.kcm
/vendor/usr/keychars/DEVICE_NAME.kcm
/system/usr/keychars/DEVICE_NAME.kcm
/data/system/devices/keychars/DEVICE_NAME.kcm
/odm/usr/keychars/Generic.kcm
/vendor/usr/keychars/Generic.kcm
/system/usr/keychars/Generic.kcm
/data/system/devices/keychars/Generic.kcm
/odm/usr/keychars/Virtual.kcm
/vendor/usr/keychars/Virtual.kcm
/system/usr/keychars/Virtual.kcm
/data/system/devices/keychars/Virtual.kcm
เมื่อสร้างเส้นทางไฟล์ที่มีชื่ออุปกรณ์ ระบบจะแทนที่อักขระทั้งหมดในชื่ออุปกรณ์ที่ไม่ใช่ '0'-'9', 'a'-'z', 'A'-'Z', '-' หรือ '_' ด้วย '_'
ไฟล์การแมปอักขระคีย์ทั่วไป
ระบบมีไฟล์แผนที่อักขระคีย์พิเศษในตัวที่เรียกว่า Generic.kcm
แผนที่อักขระของแป้นพิมพ์นี้มีไว้เพื่อรองรับแป้นพิมพ์ภายนอกมาตรฐานที่หลากหลาย
อย่าแก้ไขแผนที่อักขระคีย์ทั่วไป
ไฟล์แผนที่อักขระของแป้นเสมือน
ระบบมีไฟล์แผนที่อักขระของแป้นพิมพ์พิเศษในตัวที่เรียกว่า Virtual.kcm
ที่อุปกรณ์แป้นพิมพ์เสมือนใช้
อุปกรณ์แป้นพิมพ์เสมือนเป็นอุปกรณ์อินพุตสังเคราะห์ที่มีรหัส -1 (ดู KeyCharacterMap.VIRTUAL_KEYBOARD
) ซึ่งจะอยู่ในอุปกรณ์ Android ทั้งหมดตั้งแต่ Android Honeycomb 3.0 ขึ้นไป วัตถุประสงค์ของอุปกรณ์แป้นพิมพ์เสมือนคือการเป็นอุปกรณ์อินพุตในตัวที่รู้จักซึ่งสามารถใช้เพื่อแทรกการกดแป้นพิมพ์ลงในแอปพลิเคชันโดย IME หรือเครื่องมือทดสอบได้ แม้กระทั่งสำหรับอุปกรณ์ที่ไม่มีแป้นพิมพ์ในตัว
ระบบจะถือว่าแป้นพิมพ์เสมือนมีเลย์เอาต์ QWERTY แบบเต็มเหมือนกันในทุกอุปกรณ์ ซึ่งช่วยให้แอปพลิเคชันแทรกการกดแป้นพิมพ์โดยใช้อุปกรณ์แป้นพิมพ์เสมือนและได้ผลลัพธ์เหมือนกันเสมอ
อย่าแก้ไขแผนที่อักขระของแป้นพิมพ์เสมือน
วากยสัมพันธ์
ไฟล์แผนที่อักขระของแป้นพิมพ์คือไฟล์ข้อความธรรมดาที่ประกอบด้วยการประกาศประเภทแป้นพิมพ์และชุดการประกาศคีย์
การประกาศประเภทแป้นพิมพ์
การประกาศประเภทแป้นพิมพ์จะอธิบายลักษณะการทำงานโดยรวมของแป้นพิมพ์ ไฟล์แผนที่อักขระต้องมีประกาศประเภทแป้นพิมพ์ มักจะวางไว้ที่ด้านบนของไฟล์เพื่อความชัดเจน
type FULL
แป้นพิมพ์ต่อไปนี้จะได้รับการจดจำ
-
NUMERIC
: แป้นพิมพ์ตัวเลข (12 ปุ่ม)แป้นพิมพ์ตัวเลขรองรับการป้อนข้อความโดยใช้วิธีการแตะหลายครั้ง คุณอาจต้องแตะแป้นหลายครั้งเพื่อสร้างตัวอักษรหรือสัญลักษณ์ที่ต้องการ
โดยทั่วไปแล้ว แป้นพิมพ์ประเภทนี้ออกแบบมาสำหรับการพิมพ์ด้วยนิ้วหัวแม่มือ
สอดคล้องกับ
KeyCharacterMap.NUMERIC
-
PREDICTIVE
: แป้นพิมพ์ที่มีตัวอักษรครบทุกตัว แต่มีมากกว่า 1 ตัวอักษรต่อแป้นโดยทั่วไปแล้ว แป้นพิมพ์ประเภทนี้ออกแบบมาสำหรับการพิมพ์ด้วยนิ้วหัวแม่มือ
สอดคล้องกับ
KeyCharacterMap.PREDICTIVE
-
ALPHA
: แป้นพิมพ์ที่มีตัวอักษรทั้งหมดและอาจมีตัวเลขบางส่วนแป้นพิมพ์ตัวอักษรรองรับการป้อนข้อความโดยตรง แต่อาจมีเลย์เอาต์ที่กะทัดรัดและมีขนาดกะเล็ก ซึ่งแตกต่างจากแป้นพิมพ์
FULL
เนื่องจากสัญลักษณ์บางรายการอาจเข้าถึงได้โดยใช้เครื่องมือเลือกอักขระพิเศษบนหน้าจอเท่านั้น นอกจากนี้ เฟรมเวิร์กยังมีสิ่งอํานวยความสะดวกพิเศษสําหรับแป้นพิมพ์ตัวอักษร เช่น การใช้อักษรตัวพิมพ์ใหญ่โดยอัตโนมัติ และแป้น SHIFT และ ALT ที่เปิด/ปิด/ล็อกโดยทั่วไปแล้ว แป้นพิมพ์ประเภทนี้ออกแบบมาสำหรับการพิมพ์ด้วยนิ้วหัวแม่มือ
-
FULL
: แป้นพิมพ์แบบ PC เต็มรูปแบบแป้นพิมพ์แบบเต็มจะทำงานเหมือนแป้นพิมพ์ของ PC เข้าถึงสัญลักษณ์ทั้งหมดได้โดยตรงด้วยการกดแป้นบนแป้นพิมพ์โดยไม่ต้องใช้การสนับสนุนหรือสิ่งอำนวยความสะดวกบนหน้าจอ เช่น การใช้อักษรตัวพิมพ์ใหญ่โดยอัตโนมัติ
โดยปกติแล้วแป้นพิมพ์ประเภทนี้ออกแบบมาสำหรับการพิมพ์ด้วยมือทั้ง 2 ข้าง
-
SPECIAL_FUNCTION
: แป้นพิมพ์ที่ใช้เพื่อดำเนินการควบคุมระบบเท่านั้น ไม่ใช่สำหรับการพิมพ์แป้นพิมพ์ฟังก์ชันพิเศษประกอบด้วยแป้นที่ไม่พิมพ์เท่านั้น เช่น HOME และ POWER ที่ไม่ได้ใช้พิมพ์จริง
แผนที่อักขระของแป้น Generic.kcm
และ Virtual.kcm
เป็นแบบแป้นพิมพ์ FULL
ทั้งคู่
การประกาศคีย์
การประกาศคีย์แต่ละรายการประกอบด้วยคีย์เวิร์ด key
ตามด้วยชื่อโค้ดคีย์ Android, เครื่องหมายวงเล็บปีกกาเปิด, ชุดพร็อพเพอร์ตี้และลักษณะการทำงาน และเครื่องหมายวงเล็บปีกกาปิด
key A { label: 'A' base: 'a' shift, capslock: 'A' ctrl, alt, meta: none }
คุณสมบัติ
พร็อพเพอร์ตี้คีย์แต่ละรายการจะสร้างการแมปจากคีย์ไปยังลักษณะการทำงาน หากต้องการให้ไฟล์การแมปอักขระหลักมีขนาดกะทัดรัดยิ่งขึ้น คุณสามารถแมปพร็อพเพอร์ตี้หลายรายการให้มีลักษณะการทำงานแบบเดียวกันได้โดยคั่นด้วยคอมมา
ในตัวอย่างข้างต้น พร็อพเพอร์ตี้ label
ได้รับการกําหนดลักษณะการทํางาน 'A'
ในทํานองเดียวกัน ระบบจะกําหนดลักษณะการทํางาน none
ให้กับพร็อพเพอร์ตี้ ctrl
, alt
และ meta
ทั้งหมดพร้อมกัน
ระบบจะจดจำพร็อพเพอร์ตี้ต่อไปนี้
-
label
: ระบุป้ายกำกับที่พิมพ์บนกุญแจจริงเมื่อประกอบด้วยอักขระเดียว นี่คือค่าที่แสดงโดยเมธอดKeyCharacterMap.getDisplayLabel
-
number
: ระบุลักษณะการทำงาน (อักขระที่ควรพิมพ์) เมื่อมุมมองข้อความตัวเลขได้รับโฟกัส เช่น เมื่อผู้ใช้พิมพ์หมายเลขโทรศัพท์แป้นพิมพ์แบบกะทัดรัดมักจะรวมสัญลักษณ์หลายรายการไว้ในแป้นเดียว เช่น แป้นเดียวกันอาจใช้พิมพ์
'1'
และ'a'
หรือ'#'
และ'q'
สำหรับคีย์เหล่านี้ คุณควรตั้งค่าพร็อพเพอร์ตี้number
เพื่อระบุสัญลักษณ์ที่ควรพิมพ์ในบริบทตัวเลข (หากมี)สัญลักษณ์ "ตัวเลข" ทั่วไปบางรายการคือตัวเลข
'0'
ถึง'9'
,'#'
,'+'
,'('
,')'
,','
และ'.'
-
base
: ระบุลักษณะการทำงาน (อักขระที่ควรพิมพ์) เมื่อไม่ได้กดตัวปรับแต่ง -
<modifier> หรือ <modifier1>
+
<modifier2>+
...: ระบุลักษณะการทำงาน (อักขระที่ควรพิมพ์) เมื่อกดแป้นและตัวควบคุมที่ระบุทั้งหมดทำงานอยู่ตัวอย่างเช่น พร็อพเพอร์ตี้ตัวแก้ไข
shift
จะระบุลักษณะการทำงานที่มีผลเมื่อกดตัวแก้ไข SHIFT ซ้ายหรือขวาในทำนองเดียวกัน พร็อพเพอร์ตี้ตัวแก้ไข
rshift+ralt
จะระบุลักษณะการทำงานที่จะมีผลเมื่อกดแป้น SHIFT ขวาและ ALT ขวาพร้อมกัน
ระบบจะจดจำตัวแก้ไขต่อไปนี้ในพร็อพเพอร์ตี้ตัวแก้ไข
shift
: ใช้เมื่อกดแป้น SHIFT ซ้ายหรือขวาlshift
: ใช้เมื่อกดตัวควบคุม SHIFT ซ้ายrshift
: ใช้เมื่อกดแป้นแป้นพิมพ์ลัด SHIFT ขวาalt
: ใช้เมื่อกดแป้นกดร่วม ALT ซ้ายหรือขวาlalt
: ใช้เมื่อกดแป้นกดร่วม ALT ซ้ายralt
: ใช้เมื่อกดแป้นกดร่วม ALT ขวาctrl
: ใช้เมื่อกดแป้นกดร่วม Ctrl ซ้ายหรือขวาlctrl
: ใช้เมื่อกดตัวควบคุมแป้นพิมพ์ Ctrl ซ้ายrctrl
: ใช้เมื่อกดตัวควบคุมแป้นควบคุมขวาmeta
: ใช้เมื่อกดตัวแก้ไข META ซ้ายหรือขวาlmeta
: ใช้เมื่อกดตัวแก้ไข META ซ้ายrmeta
: ใช้เมื่อกดตัวแก้ไข META ขวาsym
: ใช้เมื่อกดตัวหลีก SYMBOLfn
: ใช้เมื่อกดตัวแก้ไข FUNCTIONcapslock
: ใช้เมื่อแป้นกดร่วม CAPS LOCK ล็อกอยู่numlock
: ใช้เมื่อตัวแก้ไข NUM LOCK ล็อกอยู่scrolllock
: ใช้เมื่อตัวแก้ไข SCROLL LOCK ล็อกอยู่
ลำดับที่แสดงที่พักมีความสำคัญ เมื่อแมปคีย์กับลักษณะการทํางาน ระบบจะสแกนพร็อพเพอร์ตี้ที่เกี่ยวข้องทั้งหมดตามลําดับ แล้วแสดงลักษณะการทํางานที่เกี่ยวข้องล่าสุดที่พบ
ดังนั้น พร็อพเพอร์ตี้ที่ระบุในภายหลังจะลบล้างพร็อพเพอร์ตี้ที่ระบุไว้ก่อนหน้านี้สำหรับคีย์หนึ่งๆ
ลักษณะการทำงาน
แต่ละพร็อพเพอร์ตี้จะจับคู่กับลักษณะการทำงาน ลักษณะการทำงานที่พบบ่อยที่สุดคือการพิมพ์อักขระ แต่ก็ยังมีลักษณะการทำงานอื่นๆ อีกมากมาย
ระบบจะจดจำพฤติกรรมต่อไปนี้
-
none
: อย่าพิมพ์อักขระลักษณะการทำงานนี้เป็นค่าเริ่มต้นเมื่อไม่ได้ระบุอักขระ การระบุ
none
เป็นตัวเลือกที่ไม่บังคับ แต่จะช่วยให้ชัดเจนขึ้น -
'X'
: พิมพ์อักขระที่ระบุลักษณะการทำงานนี้จะทำให้ระบบป้อนอักขระที่ระบุลงในมุมมองข้อความที่โฟกัส อักขระตัวยึดตำแหน่งอาจเป็นอักขระ ASCII ใดก็ได้ หรือเป็นอักขระหลีกค่าใดค่าหนึ่งต่อไปนี้
'\\'
: พิมพ์อักขระแบ็กสแลช'\n'
: พิมพ์อักขระบรรทัดใหม่ (ใช้สำหรับ ENTER / RETURN)'\t'
: พิมพ์อักขระ TAB'\''
: พิมพ์อักขระเครื่องหมายอะพอสทรอฟี'\"'
: พิมพ์เครื่องหมายคำพูด'\uXXXX'
: พิมพ์อักขระ Unicode ที่มีจุดโค้ดเป็นเลขฐาน 16 ตามด้วย XXXX
-
fallback
<Android key code name>: ดำเนินการเริ่มต้นหากแอปพลิเคชันไม่ได้จัดการคีย์ลักษณะการทำงานนี้จะทำให้ระบบจำลองการกดแป้นอื่นเมื่อแอปพลิเคชันไม่ได้จัดการแป้นที่ระบุโดยค่าเริ่มต้น ใช้ในการรองรับลักษณะการทำงานเริ่มต้นสำหรับแป้นใหม่ที่แอปพลิเคชันบางรายการไม่ทราบวิธีจัดการ เช่น แป้น ESCAPE หรือแป้นตัวเลข (เมื่อไม่ได้กด NumLock)
เมื่อลักษณะการทํางานสำรองทำงาน แอปพลิเคชันจะได้รับการกดแป้น 2 ครั้ง แป้นแรกสําหรับแป้นเดิม และอีกแป้นสําหรับแป้นสำรองที่เลือก หากแอปพลิเคชันจัดการคีย์เดิมระหว่างที่ยกเลิกการกดแป้น ระบบจะยกเลิกเหตุการณ์คีย์สำรอง (
KeyEvent.isCanceled
จะแสดงผลเป็นtrue
)
ระบบสงวนอักขระ Unicode 2 ตัวไว้เพื่อใช้ฟังก์ชันพิเศษ ดังนี้
-
'\uef00'
: เมื่อใช้ลักษณะการทำงานนี้ มุมมองข้อความจะลบและนำอักขระ 4 ตัวที่อยู่หน้าเคอร์เซอร์ออก ตีความอักขระเหล่านั้นเป็นตัวเลขฐาน 16 และแทรกจุดโค้ด Unicode ที่เกี่ยวข้อง -
'\uef01'
: เมื่อใช้ลักษณะการทำงานนี้ มุมมองข้อความจะแสดงกล่องโต้ตอบเครื่องมือเลือกอักขระที่มีสัญลักษณ์อื่นๆ
ระบบจะจดจำอักขระ Unicode ต่อไปนี้ว่าเป็นอักขระการกำกับการออกเสียงที่ตายแล้วซึ่งรวมกัน
'\u0300'
: เกรฟแอกเซนต์'\u0301'
: อะคิวต์แอกเซนต์'\u0302'
: เครื่องหมายเซอร์คัมเฟลกซ์'\u0303'
: เครื่องหมายทิลเดอ'\u0308'
: เครื่องหมายกำกับการออกเสียงแบบอูมลัต
เมื่อพิมพ์แป้นตายตามด้วยอักขระอื่น ระบบจะรวมแป้นตายและอักขระที่ตามเข้ามา เช่น เมื่อผู้ใช้พิมพ์แป้นตายเครื่องหมายกำกับการออกเสียงลงตามด้วยตัวอักษร "a" ผลลัพธ์ที่ได้คือ "à"
ดูข้อมูลเพิ่มเติมเกี่ยวกับการจัดการคีย์ที่ใช้งานไม่ได้ได้ที่ KeyCharacterMap.getDeadChar
ความคิดเห็น
บรรทัดความคิดเห็นจะขึ้นต้นด้วย "#" และต่อไปจนถึงท้ายบรรทัด ดังนี้
# A comment!
ระบบจะไม่สนใจบรรทัดว่าง
วิธีจับคู่ชุดแป้นกับลักษณะการทำงาน
เมื่อผู้ใช้กดแป้น ระบบจะค้นหาลักษณะการทำงานที่เชื่อมโยงกับการกดแป้นนั้นร่วมกับตัวควบคุมการแก้ไขที่กดอยู่
SHIFT + A
สมมติว่าผู้ใช้กดแป้น A และ SHIFT พร้อมกัน ระบบจะค้นหาชุดพร็อพเพอร์ตี้และลักษณะการทํางานที่เชื่อมโยงกับ KEYCODE_A
ก่อน
key A { label: 'A' base: 'a' shift, capslock: 'A' ctrl, alt, meta: none }
ระบบจะสแกนพร็อพเพอร์ตี้จากรายการแรกไปจนถึงรายการสุดท้ายและจากซ้ายไปขวา โดยจะไม่สนใจพร็อพเพอร์ตี้ label
และ number
ซึ่งเป็นพร็อพเพอร์ตี้พิเศษ
พร็อพเพอร์ตี้แรกที่พบคือ base
พร็อพเพอร์ตี้ base
จะมีผลกับแป้นเสมอ ไม่ว่าจะกดแป้นกดร่วมใดก็ตาม โดยพื้นฐานแล้ว พร็อพเพอร์ตี้นี้จะระบุลักษณะการทํางานเริ่มต้นสําหรับคีย์ เว้นแต่ว่าพร็อพเพอร์ตี้ต่อไปนี้จะลบล้าง
เนื่องจากพร็อพเพอร์ตี้ base
ใช้กับการกดแป้นนี้ ระบบจึงบันทึกว่าลักษณะการทํางานคือ 'a'
(พิมพ์อักขระ a
)
จากนั้นระบบจะสแกนพร็อพเพอร์ตี้ต่อๆ ไปในกรณีที่พร็อพเพอร์ตี้ใดมีความเฉพาะเจาะจงมากกว่า base
และลบล้างพร็อพเพอร์ตี้ดังกล่าว พบ shift
ซึ่งมีผลกับการกดแป้น SHIFT + A ด้วย ดังนั้นระบบจึงตัดสินใจที่จะไม่สนใจลักษณะการทํางานของพร็อพเพอร์ตี้ base
และเลือกลักษณะการทํางานที่เชื่อมโยงกับพร็อพเพอร์ตี้ shift
ซึ่งก็คือ 'A'
(พิมพ์อักขระ A
)
จากนั้นจะสแกนตารางต่อ แต่ไม่มีพร็อพเพอร์ตี้อื่นๆ ที่ใช้กับการกดแป้นนี้ (ไม่ได้ล็อก CAPS LOCK, ไม่ได้กดแป้น CONTROL, ไม่ได้กดแป้น ALT และไม่ได้กดแป้น META)
ดังนั้นลักษณะการทำงานที่ได้สำหรับชุดแป้น SHIFT + A คือ 'A'
CONTROL + A
ตอนนี้ให้พิจารณาว่าจะเกิดอะไรขึ้นหากผู้ใช้กดแป้น A และแป้น CONTROL พร้อมกัน
ระบบจะสแกนตารางพร็อพเพอร์ตี้ตามปกติ แต่จะเห็นว่าพร็อพเพอร์ตี้ base
มีผล แต่ก็จะสแกนต่อไปจนกว่าจะถึงพร็อพเพอร์ตี้ control
ในกรณีนี้ พร็อพเพอร์ตี้ control
จะปรากฏหลังจาก base
ดังนั้นลักษณะการทํางานของพร็อพเพอร์ตี้ control
จะลบล้างลักษณะการทํางานของ base
ดังนั้นลักษณะการทำงานที่ได้สำหรับชุดแป้นพิมพ์ CONTROL + A คือ none
ESC
สมมติว่าผู้ใช้กดแป้น ESCAPE
key ESCAPE { base: fallback BACK alt, meta: fallback HOME ctrl: fallback MENU }
ในครั้งนี้ระบบได้รับลักษณะการทำงาน fallback BACK
ซึ่งเป็นลักษณะการทำงานสำรอง
เนื่องจากไม่มีอักขระตามจริงปรากฏขึ้น ระบบจะไม่พิมพ์อักขระใดๆ
เมื่อประมวลผลคีย์ ระบบจะส่ง KEYCODE_ESCAPE
ไปยังแอปพลิเคชันก่อน หากแอปพลิเคชันไม่จัดการกับเหตุการณ์ดังกล่าว ระบบจะลองอีกครั้ง แต่คราวนี้จะส่ง KEYCODE_BACK
ไปยังแอปพลิเคชันตามที่ลักษณะการทำงานสำรองร้องขอ
ดังนั้นแอปพลิเคชันที่รู้จักและรองรับ KEYCODE_ESCAPE
จึงมีโอกาสจัดการกับรูปแบบดังกล่าวได้ แต่แอปพลิเคชันอื่นๆ ที่ไม่รู้จักจะดำเนินการสำรองโดยถือว่าคีย์เป็น KEYCODE_BACK
แทน
NUMPAD_0 ที่มีหรือไม่มี NUM LOCK
ปุ่มบนแป้นตัวเลขมีวิธีตีความที่แตกต่างกันมาก โดยขึ้นอยู่กับว่าปุ่ม NUM LOCK ล็อกอยู่หรือไม่
การประกาศคีย์ต่อไปนี้ช่วยให้มั่นใจว่า KEYCODE_NUMPAD_0
จะพิมพ์ 0
เมื่อกด NUM LOCK เมื่อไม่ได้กด NUM LOCK ระบบจะส่งคีย์ไปยังแอปพลิเคชันตามปกติ และหากแอปพลิเคชันไม่ได้จัดการคีย์ดังกล่าว ระบบจะส่งคีย์สำรอง KEYCODE_INSERT
แทน
key NUMPAD_0 { label, number: '0' base: fallback INSERT numlock: '0' ctrl, alt, meta: none }
เราเห็นว่าการประกาศคีย์สำรองช่วยเพิ่มความเข้ากันได้อย่างมากกับแอปพลิเคชันรุ่นเก่าที่ไม่รู้จักหรือรองรับแป้นทั้งหมดในแป้นพิมพ์สไตล์ PC แบบเต็ม
ตัวอย่าง
แป้นพิมพ์แบบเต็ม
# This is an example of part of a key character map file for a full keyboard # include a few fallback behaviors for special keys that few applications # handle themselves. type FULL key C { label: 'C' base: 'c' shift, capslock: 'C' alt: '\u00e7' shift+alt: '\u00c7' ctrl, meta: none } key SPACE { label: ' ' base: ' ' ctrl: none alt, meta: fallback SEARCH } key NUMPAD_9 { label, number: '9' base: fallback PAGE_UP numlock: '9' ctrl, alt, meta: none }
แป้นพิมพ์ตัวอักษรและตัวเลข
# This is an example of part of a key character map file for an alphanumeric # thumb keyboard. Some keys are combined, such as `A` and `2`. Here we # specify `number` labels to tell the system what to do when the user is # typing a number into a dial pad. # # Also note the special character '\uef01' mapped to ALT+SPACE. # Pressing this combination of keys invokes an on-screen character picker. type ALPHA key A { label: 'A' number: '2' base: 'a' shift, capslock: 'A' alt: '#' shift+alt, capslock+alt: none } key SPACE { label: ' ' number: ' ' base: ' ' shift: ' ' alt: '\uef01' shift+alt: '\uef01' }
แผ่นเกม
# This is an example of part of a key character map file for a game pad. # It defines fallback actions that enable the user to navigate the user interface # by pressing buttons. type SPECIAL_FUNCTION key BUTTON_A { base: fallback BACK } key BUTTON_X { base: fallback DPAD_CENTER } key BUTTON_START { base: fallback HOME } key BUTTON_SELECT { base: fallback MENU }
หมายเหตุเกี่ยวกับความเข้ากันได้
ก่อน Android Honeycomb 3.0 ระบบจะระบุแผนที่อักขระคีย์ของ Android โดยใช้ไวยากรณ์ที่แตกต่างออกไปมากและคอมไพล์เป็นรูปแบบไฟล์ไบนารี (.kcm.bin
) ในเวลาที่สร้าง
แม้ว่ารูปแบบใหม่จะใช้ส่วนขยาย .kcm
เดียวกัน แต่ไวยากรณ์จะแตกต่างกันมาก (และมีประสิทธิภาพมากกว่ามาก)
ตั้งแต่ Android Honeycomb 3.0 เป็นต้นไป ไฟล์การแมปอักขระหลักทั้งหมดของ Android ต้องใช้รูปแบบไฟล์ข้อความธรรมดาและไวยากรณ์ใหม่ตามที่อธิบายไว้ในเอกสารนี้
ระบบไม่รองรับไวยากรณ์แบบเก่าและไม่รู้จักไฟล์ .kcm.bin
เก่า
หมายเหตุเกี่ยวกับภาษา
ปัจจุบัน Android ไม่รองรับแป้นพิมพ์หลายภาษา นอกจากนี้ แผนที่อักขระของแป้นทั่วไปในตัวจะถือว่าใช้รูปแบบแป้นพิมพ์ภาษาอังกฤษแบบสหรัฐอเมริกา
เราขอแนะนำให้ OEM ระบุการแมปอักขระของแป้นที่กำหนดเองสำหรับแป้นพิมพ์ของตนหากออกแบบมาสำหรับภาษาอื่นๆ
Android เวอร์ชันในอนาคตอาจรองรับแป้นพิมพ์หลายภาษาหรือเลย์เอาต์แป้นพิมพ์ที่ผู้ใช้เลือกได้ดีขึ้น
การตรวจสอบความถูกต้อง
ตรวจสอบว่าได้ตรวจสอบไฟล์การแมปอักขระของคีย์โดยใช้เครื่องมือตรวจสอบการแมปคีย์