ملفات الخرائط الشخصية الرئيسية

تعد ملفات خريطة الأحرف الرئيسية (ملفات .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 : لوحة مفاتيح تحتوي على جميع الحروف، ولكن مع أكثر من حرف واحد لكل مفتاح.

    تم تصميم هذا النوع من لوحة المفاتيح عمومًا للكتابة بالإبهام.

    يتوافق مع KeyCharacterMap.PREDICTIVE .

  • ALPHA : لوحة مفاتيح تحتوي على جميع الحروف، وربما بعض الأرقام.

    تدعم لوحة المفاتيح الأبجدية إدخال النص مباشرةً، ولكنها قد تحتوي على تخطيط مكثف مع عامل شكل صغير. على النقيض من لوحة المفاتيح FULL ، قد لا يمكن الوصول إلى بعض الرموز إلا باستخدام منتقي الأحرف الخاص الذي يظهر على الشاشة. بالإضافة إلى ذلك، ولتحسين سرعة الكتابة ودقتها، يوفر الإطار إمكانيات خاصة للوحات المفاتيح الأبجدية مثل الكتابة بالأحرف الكبيرة تلقائيًا ومفاتيح SHIFT وALT المقفلة/المبدلة.

    تم تصميم هذا النوع من لوحة المفاتيح عمومًا للكتابة بالإبهام.

  • FULL : لوحة مفاتيح كاملة على غرار الكمبيوتر الشخصي.

    تعمل لوحة المفاتيح الكاملة مثل لوحة مفاتيح الكمبيوتر. يتم الوصول إلى جميع الرموز مباشرة عن طريق الضغط على المفاتيح الموجودة على لوحة المفاتيح دون دعم على الشاشة أو إمكانيات مثل الكتابة بالأحرف الكبيرة تلقائيًا.

    تم تصميم هذا النوع من لوحة المفاتيح عمومًا للكتابة الكاملة باليدين.

  • SPECIAL_FUNCTION : لوحة مفاتيح تُستخدم فقط لأداء وظائف التحكم في النظام بدلاً من الكتابة.

    تتكون لوحة المفاتيح ذات الوظائف الخاصة فقط من مفاتيح غير قابلة للطباعة مثل HOME وPOWER والتي لا يتم استخدامها فعليًا للكتابة.

إن مخططات الأحرف الرئيسية Generic.kcm و Virtual.kcm عبارة عن لوحات مفاتيح FULL .

التصريحات الرئيسية

تتكون كل إعلانات المفاتيح من key الكلمة الأساسية متبوعًا بالاسم الرمزي لمفتاح Android، وقوس متعرج مفتوح، ومجموعة من الخصائص والسلوكيات، وقوس متعرج قريب.

key A {
    label:                              'A'
    base:                               'a'
    shift, capslock:                    'A'
    ctrl, alt, meta:                    none
}

ملكيات

تقوم كل خاصية رئيسية بإنشاء تعيين من المفتاح إلى السلوك. لجعل ملفات خريطة الأحرف الرئيسية أكثر إحكاما، يمكن تعيين العديد من الخصائص لنفس السلوك عن طريق فصلها بفاصلة.

في المثال أعلاه، تم تعيين السلوك 'A' لخاصية label . وبالمثل، يتم تعيين السلوك none للخصائص ctrl و alt و meta في نفس الوقت.

يتم التعرف على الخصائص التالية:

  • label : يحدد الملصق المطبوع فعليًا على المفتاح، عندما يتكون من حرف واحد. هذه هي القيمة التي يتم إرجاعها بواسطة الأسلوب KeyCharacterMap.getDisplayLabel .

  • number : يحدد السلوك (الحرف الذي يجب كتابته) عندما يتم التركيز على عرض النص الرقمي، كما هو الحال عندما يقوم المستخدم بكتابة رقم هاتف.

    غالبًا ما تجمع لوحات المفاتيح المدمجة رموزًا متعددة في مفتاح واحد، بحيث يمكن استخدام نفس المفتاح لكتابة '1' و 'a' أو '#' و 'q' ، ربما. بالنسبة لهذه المفاتيح، يجب تعيين خاصية number للإشارة إلى الرمز الذي يجب كتابته في سياق رقمي، إن وجد.

    بعض الرموز "الرقمية" النموذجية هي الأرقام من '0' إلى '9' و '#' و '+' '(' و ')' ',' و '.' .

  • base : يحدد السلوك (الحرف الذي يجب كتابته) عند عدم الضغط على أي معدّلات.

  • <modifier> أو <modifier1> + <modifier2> + ...: يحدد السلوك (الحرف الذي يجب كتابته) عند الضغط على المفتاح وتكون جميع المعدلات المحددة نشطة.

    على سبيل المثال، تحدد خاصية shift السلوك الذي يتم تطبيقه عند الضغط على مفتاح التعديل LEFT SHIFT أو RIGHT SHIFT.

    وبالمثل، تحدد خاصية التعديل rshift+ralt السلوك الذي ينطبق عند الضغط على كل من معدّلات RIGHT SHIFT وRIGHT ALT معًا.

يتم التعرف على المعدلات التالية في خصائص المعدل:

  • shift : ينطبق عند الضغط على معدّل LEFT SHIFT أو RIGHT SHIFT.
  • lshift : ينطبق عند الضغط على مفتاح التعديل LEFT SHIFT.
  • rshift : ينطبق عند الضغط على مفتاح التعديل RIGHT SHIFT.
  • alt : ينطبق عند الضغط على مفتاح التعديل LEFT ALT أو RIGHT ALT.
  • lalt : ينطبق عند الضغط على مفتاح التعديل LEFT ALT.
  • ralt : ينطبق عند الضغط على مفتاح التعديل RIGHT ALT.
  • ctrl : ينطبق عند الضغط على معدّل LEFT CONTROL أو RIGHT CONTROL.
  • lctrl : ينطبق عند الضغط على معدّل LEFT CONTROL.
  • rctrl : ينطبق عند الضغط على مفتاح التحكم الأيمن.
  • meta : ينطبق عند الضغط على معدّل LEFT META أو RIGHT META.
  • lmeta : ينطبق عند الضغط على معدّل LEFT META.
  • rmeta : ينطبق عند الضغط على معدّل RIGHT 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 الذي تم تحديد نقطة الرمز الخاصة به بالشكل السداسي بواسطة XXXX.
  • fallback <اسم رمز مفتاح Android>: قم بتنفيذ إجراء افتراضي إذا لم تتم معالجة المفتاح بواسطة التطبيق.

    يؤدي هذا السلوك إلى قيام النظام بمحاكاة ضغطة مفتاح مختلفة عندما لا يتعامل التطبيق مع المفتاح المحدد محليًا. يتم استخدامه لدعم السلوك الافتراضي للمفاتيح الجديدة التي لا تعرف جميع التطبيقات كيفية التعامل معها، مثل ESCAPE أو مفاتيح لوحة المفاتيح الرقمية (عند عدم الضغط على numlock).

    عند تنفيذ سلوك احتياطي، سيتلقى التطبيق ضغطتين على المفتاح: واحدة للمفتاح الأصلي والأخرى للمفتاح الاحتياطي الذي تم تحديده. إذا تعامل التطبيق مع المفتاح الأصلي أثناء عملية المفتاح، فسيتم إلغاء حدث المفتاح الاحتياطي (سيعود KeyEvent.isCanceled true ).

يحتفظ النظام بحرفين Unicode لأداء وظائف خاصة:

  • '\uef00' : عند تنفيذ هذا السلوك، يستهلك عرض النص الأحرف الأربعة التي تسبق المؤشر ويزيلها، ويفسرها كأرقام سداسية عشرية، ويدرج نقطة كود Unicode المقابلة.

  • '\uef01' : عند تنفيذ هذا السلوك، تعرض طريقة عرض النص مربع حوار منتقي الأحرف الذي يحتوي على رموز متنوعة.

يتعرف النظام على أحرف Unicode التالية على أنها تجمع بين أحرف التشكيل الأساسية الميتة:

  • '\u0300' : لهجة خطيرة.
  • '\u0301' : لهجة حادة.
  • '\u0302' : لهجة محيطية.
  • '\u0303' : لهجة التلدة.
  • '\u0308' : علامة تشكيل.

عند كتابة مفتاح ميت متبوعًا بحرف آخر، يتم تكوين المفتاح الميت والأحرف التالية. على سبيل المثال، عندما يقوم المستخدم بكتابة مفتاح ميت متبوعًا بالحرف "a"، تكون النتيجة "à".

ارجع إلى KeyCharacterMap.getDeadChar للحصول على مزيد من المعلومات حول معالجة المفاتيح الميتة.

تعليقات

تبدأ أسطر التعليق بـ "#" وتستمر حتى نهاية السطر. مثله:

# A comment!

يتم تجاهل الأسطر الفارغة.

كيف يتم تعيين المجموعات الرئيسية للسلوكيات

عندما يضغط المستخدم على أحد المفاتيح، يبحث النظام عن السلوك المرتبط بمزيج الضغط على هذا المفتاح والمعدلات المضغوطة حاليًا.

التحول + أ

لنفترض أن المستخدم ضغط على 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' .

التحكم + أ

الآن فكر في ما يمكن أن يحدث إذا قام المستخدم بالضغط على A وCONTROL معًا.

كما كان من قبل، سيقوم النظام بمسح جدول الخصائص. سيلاحظ أن الخاصية base مطبقة ولكنها ستستمر أيضًا في المسح حتى تصل في النهاية إلى خاصية control . كما يحدث، تظهر خاصية control بعد base بحيث يتجاوز سلوكها السلوك base .

وبالتالي فإن السلوك الناتج لمجموعة المفاتيح CONTROL + A هو none .

يهرب

لنفترض الآن أن المستخدم ضغط على 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
}

كما نرى، تعمل إعلانات المفاتيح الاحتياطية على تحسين التوافق بشكل كبير مع التطبيقات القديمة التي لا تتعرف على جميع المفاتيح الموجودة على لوحة مفاتيح نمط الكمبيوتر الشخصي الكاملة أو تدعمها بشكل مباشر.

أمثلة

لوحة مفاتيح كاملة

# 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 حاليًا لوحات المفاتيح متعددة اللغات. علاوة على ذلك، تفترض خريطة الأحرف العامة المضمنة تخطيط لوحة المفاتيح باللغة الإنجليزية الأمريكية.

يتم تشجيع مصنعي المعدات الأصلية على توفير خرائط أحرف رئيسية مخصصة للوحات المفاتيح الخاصة بهم إذا كانت مصممة للغات أخرى.

قد توفر الإصدارات المستقبلية من Android دعمًا أفضل للوحات المفاتيح متعددة اللغات أو تخطيطات لوحة المفاتيح التي يمكن للمستخدم تحديدها.

تصديق

تأكد من التحقق من صحة ملفات خريطة الأحرف الرئيسية باستخدام أداة التحقق من خرائط المفاتيح .