ไฟล์การแมปอักขระหลัก

ไฟล์การแมปอักขระของแป้นพิมพ์ (ไฟล์ .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: ใช้เมื่อกดตัวหลีก SYMBOL
  • fn: ใช้เมื่อกดตัวแก้ไข FUNCTION
  • capslock: ใช้เมื่อแป้นกดร่วม 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 เวอร์ชันในอนาคตอาจรองรับแป้นพิมพ์หลายภาษาหรือเลย์เอาต์แป้นพิมพ์ที่ผู้ใช้เลือกได้ดีขึ้น

การตรวจสอบความถูกต้อง

ตรวจสอบว่าได้ตรวจสอบไฟล์การแมปอักขระของคีย์โดยใช้เครื่องมือตรวจสอบการแมปคีย์