Anahtar karakter harita dosyaları

Anahtar karakter eşleme dosyaları ( .kcm dosyaları), Android anahtar kodlarının değiştiricilerle kombinasyonlarının Unicode karakterlerle eşleştirilmesinden sorumludur.

Cihaza özel tuş düzeni dosyaları, sisteme cihazın yalnızca özel amaçlı olduğunu (tam bir klavye olmadığını) bildirmek için, tuşları olan tüm dahili (yerleşik) giriş cihazları için gereklidir .

Cihaza özel tuş düzeni dosyaları harici klavyeler için isteğe bağlıdır ve çoğu zaman hiç gerekli değildir. Sistem, birçok harici klavyeye uygun genel bir tuş karakter haritası sağlar.

Cihaza özel bir tuş düzeni dosyası yoksa sistem bunun yerine varsayılanı seçecektir.

Konum

Anahtar karakter eşleme dosyaları, USB satıcısına, ürün (ve isteğe bağlı olarak sürüm) kimliğine veya giriş cihazı adına göre bulunur.

Aşağıdaki yollara sırasıyla başvurulur.

  • /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

Cihaz adını içeren bir dosya yolu oluştururken, cihaz adındaki '0'-'9', 'a'-'z', 'A'-'Z', '-' veya '_' dışındaki tüm karakterler '_' ile değiştirilir.

Genel anahtar karakter eşleme dosyası

Sistem, Generic.kcm adı verilen özel bir yerleşik anahtar karakter eşleme dosyası sağlar. Bu tuş karakter haritasının çeşitli standart harici klavyeleri desteklemesi amaçlanmıştır.

Genel anahtar karakter haritasını değiştirmeyin!

Sanal anahtar karakter eşleme dosyası

Sistem, sanal klavye aygıtları tarafından kullanılan, Virtual.kcm adı verilen özel bir yerleşik anahtar karakter eşleme dosyası sağlar.

Sanal klavye aygıtı, kimliği -1 olan sentetik bir giriş aygıtıdır (bkz. KeyCharacterMap.VIRTUAL_KEYBOARD ). Android Honeycomb 3.0'dan itibaren tüm Android cihazlarda mevcuttur. Sanal klavye aygıtının amacı, yerleşik klavyeye sahip olmayan aygıtlar için bile IME veya test araçları yoluyla uygulamalara tuş vuruşlarını enjekte etmek için kullanılabilecek bilinen bir yerleşik giriş aygıtı sağlamaktır.

Sanal klavyenin, tüm cihazlarda aynı olan tam bir QWERTY düzenine sahip olduğu varsayılır. Bu, uygulamaların sanal klavye aygıtını kullanarak tuş vuruşlarını eklemesini ve her zaman aynı sonuçları almasını mümkün kılar.

Sanal anahtar karakter haritasını değiştirmeyin!

Sözdizimi

Anahtar karakter eşleme dosyası, klavye türü bildirimi ve bir dizi anahtar bildirimden oluşan düz metin dosyasıdır.

Klavye türü bildirimi

Klavye türü bildirimi, klavyenin genel davranışını açıklar. Bir karakter eşleme dosyası bir klavye türü bildirimi içermelidir. Açıklık sağlamak için genellikle dosyanın en üstüne yerleştirilir.

type FULL

Aşağıdaki klavye türleri tanınır:

  • NUMERIC : Sayısal (12 tuşlu) klavye.

    Sayısal klavye, çoklu dokunma yaklaşımını kullanarak metin girişini destekler. İstenilen harf veya simgeyi oluşturmak için bir tuşa birden çok kez basmak gerekebilir.

    Bu klavye türü genellikle başparmakla yazmak için tasarlanmıştır.

    KeyCharacterMap.NUMERIC karşılık gelir.

  • PREDICTIVE : Tüm harfleri içeren ancak tuş başına birden fazla harf içeren bir klavye.

    Bu klavye türü genellikle başparmakla yazmak için tasarlanmıştır.

    KeyCharacterMap.PREDICTIVE karşılık gelir.

  • ALPHA : Tüm harflerin ve belki bazı rakamların bulunduğu bir klavye.

    Alfabetik klavye doğrudan metin girişini destekler ancak küçük bir form faktörüyle yoğunlaştırılmış bir düzene sahip olabilir. FULL klavyenin aksine, bazı sembollere yalnızca ekrandaki özel karakter seçiciler kullanılarak erişilebilir. Ek olarak, yazma hızını ve doğruluğunu artırmak için çerçeve, alfabetik klavyeler için otomatik büyük harf kullanımı ve geçişli/kilitli SHIFT ve ALT tuşları gibi özel olanaklar sağlar.

    Bu klavye türü genellikle başparmakla yazmak için tasarlanmıştır.

  • FULL : Tam PC tarzı bir klavye.

    Tam bir klavye, bir PC klavyesi gibi davranır. Tüm sembollere, ekran desteği veya otomatik büyük harf kullanımı gibi olanaklar olmadan, klavyedeki tuşlara basılarak doğrudan erişilir.

    Bu klavye türü genellikle iki elle tam yazma için tasarlanmıştır.

  • SPECIAL_FUNCTION : Yazmak yerine yalnızca sistem kontrol işlevlerini gerçekleştirmek için kullanılan bir klavye.

    Özel işlevli bir klavye, gerçekte yazmak için kullanılmayan, yalnızca HOME ve POWER gibi yazdırma dışı tuşlardan oluşur.

Generic.kcm ve Virtual.kcm anahtar karakter haritalarının her ikisi de FULL klavyelerdir.

Anahtar beyanlar

Anahtar key her biri, anahtar sözcüğünden ve bunu takip eden bir Android anahtar kod adından, açık küme parantezinden, bir dizi özellik ve davranıştan ve kapalı küme parantezinden oluşur.

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

Özellikler

Her anahtar özelliği, bir anahtardan davranışa bir eşleme oluşturur. Anahtar karakter eşleme dosyalarını daha kompakt hale getirmek için, çeşitli özellikler virgülle ayrılarak aynı davranışa eşlenebilir.

Yukarıdaki örnekte label özelliğine 'A' davranışı atanmıştır. Benzer şekilde ctrl , alt ve meta özelliklerinin tümüne aynı anda none davranışı atanır.

Aşağıdaki özellikler tanınır:

  • label : Tek karakterden oluştuğunda anahtarın üzerine fiziksel olarak basılan etiketi belirtir. Bu, KeyCharacterMap.getDisplayLabel yöntemi tarafından döndürülen değerdir.

  • number : Kullanıcının bir telefon numarası yazarken olduğu gibi sayısal bir metin görünümü odağa alındığında davranışı (yazılması gereken karakter) belirtir.

    Kompakt klavyeler genellikle birden fazla sembolü tek bir tuşta birleştirir; öyle ki, '1' ve 'a' veya '#' ve 'q' yazmak için aynı tuş kullanılabilir. Bu tuşlar için number özelliği, varsa sayısal bağlamda hangi sembolün yazılması gerektiğini gösterecek şekilde ayarlanmalıdır.

    Bazı tipik "sayısal" semboller '0' ile '9' arası rakamlardır, '#' , '+' , '(' , ')' , ',' ve '.' .

  • base : Hiçbir değiştiriciye basılmadığında davranışı (yazılması gereken karakter) belirtir.

  • <değiştirici> veya <değiştirici1> + <değiştirici2> + ...: Tuşa basıldığında ve belirtilen değiştiricilerin tümü etkin olduğunda davranışı (yazılması gereken karakter) belirtir.

    Örneğin, değiştirici özelliği shift SOL KAYDIRMA veya SAĞA KAYDIRMA değiştiricisine basıldığında uygulanan bir davranışı belirtir.

    Benzer şekilde rshift+ralt değiştirici özelliği, hem RIGHT SHIFT hem de RIGHT ALT değiştiricilerine birlikte basıldığında uygulanan davranışı belirtir.

Aşağıdaki değiştiriciler değiştirici özelliklerinde tanınır:

  • shift : SOL KAYDIRMA veya SAĞ KAYDIRMA değiştiricisine basıldığında uygulanır.
  • lshift : LEFT SHIFT değiştiricisine basıldığında uygulanır.
  • rshift : SAĞA KAYDIRMA değiştiricisine basıldığında uygulanır.
  • alt : LEFT ALT veya RIGHT ALT değiştiricisine basıldığında uygulanır.
  • lalt : SOL ALT değiştiricisine basıldığında uygulanır.
  • ralt : SAĞ ALT değiştiricisine basıldığında uygulanır.
  • ctrl : SOL KONTROL veya SAĞ KONTROL değiştiricisine basıldığında uygulanır.
  • lctrl : SOL KONTROL değiştiricisine basıldığında uygulanır.
  • rctrl : SAĞ KONTROL değiştiricisine basıldığında uygulanır.
  • meta : LEFT META veya RIGHT META değiştiricisine basıldığında uygulanır.
  • lmeta : SOL META değiştiricisine basıldığında uygulanır.
  • rmeta : SAĞ META değiştiricisine basıldığında uygulanır.
  • sym : SEMBOL değiştiricisine basıldığında uygulanır.
  • fn : İŞLEV değiştiricisine basıldığında uygulanır.
  • capslock : CAPS LOCK değiştiricisi kilitli olduğunda uygulanır.
  • numlock : NUM LOCK değiştiricisi kilitli olduğunda uygulanır.
  • scrolllock : SCROLL LOCK değiştiricisi kilitli olduğunda uygulanır.

Gayrimenkullerin listelenme sırası önemlidir. Bir anahtarı bir davranışla eşleştirirken, sistem ilgili tüm özellikleri sırayla tarar ve bulduğu son uygulanabilir davranışı döndürür.

Sonuç olarak, daha sonra belirtilen özellikler, belirli bir anahtar için daha önce belirtilen özellikleri geçersiz kılar.

Davranışlar

Her özellik bir davranışla eşleşir. En yaygın davranış bir karakter yazmaktır ancak başka davranışlar da vardır.

Aşağıdaki davranışlar tanınır:

  • none : Bir karakter yazmayın.

    Bu davranış, hiçbir karakter belirtilmediğinde varsayılan davranıştır. none belirtilmemesi isteğe bağlıdır ancak netliği artırır.

  • 'X' : Belirtilen karakterin değişmez değerini yazın.

    Bu davranış, belirtilen karakterin odaklanmış metin görünümüne girilmesine neden olur. Karakter değişmezi herhangi bir ASCII karakteri veya aşağıdaki kaçış dizilerinden biri olabilir:

    • '\\' : Ters eğik çizgi karakteri yazın.
    • '\n' : Yeni bir satır karakteri yazın (bunu ENTER / RETURN için kullanın).
    • '\t' : Bir SEKME karakteri yazın.
    • '\'' : Bir kesme işareti karakteri yazın.
    • '\"' : Bir tırnak karakteri yazın.
    • '\uXXXX' : Kod noktası onaltılık olarak XXXX ile verilen Unicode karakterini yazın.
  • fallback <Android anahtar kod adı>: Anahtar uygulama tarafından işlenmiyorsa varsayılan bir eylem gerçekleştirin.

    Bu davranış, bir uygulama belirtilen anahtarı yerel olarak işlemediğinde sistemin farklı bir tuşa basılmasını simüle etmesine neden olur. ESCAPE veya sayısal tuş takımı tuşları (numlock'a basılmadığında) gibi tüm uygulamaların nasıl işleyeceğini bilmediği yeni tuşlar için varsayılan davranışı desteklemek için kullanılır.

    Bir geri dönüş davranışı gerçekleştirildiğinde, uygulama iki tuşa basılacaktır: biri orijinal anahtar için, diğeri seçilen geri dönüş anahtarı için. Uygulama, anahtarlama sırasında orijinal anahtarı işlerse, yedek anahtar olayı iptal edilir ( KeyEvent.isCanceled true değerini döndürür).

Sistem, özel işlevleri gerçekleştirmek için iki Unicode karakterini ayırır:

  • '\uef00' : Bu davranış gerçekleştirildiğinde, metin görünümü imleçten önceki dört karakteri tüketir ve kaldırır, bunları onaltılık basamaklar olarak yorumlar ve karşılık gelen Unicode kod noktasını ekler.

  • '\uef01' : Bu davranış gerçekleştirildiğinde, metin görünümünde çeşitli semboller içeren bir karakter seçici iletişim kutusu görüntülenir.

Sistem, aksanlı ölü anahtar karakterlerini birleştiren aşağıdaki Unicode karakterleri tanır:

  • '\u0300' : Ciddi aksan.
  • '\u0301' : Akut vurgu.
  • '\u0302' : Çevresel vurgu.
  • '\u0303' : Tilde aksanı.
  • '\u0308' : Çift nokta vurgusu.

Bir ölü anahtarın ardından başka bir karakter yazıldığında, ölü anahtar ve aşağıdaki karakterler oluşturulur. Örneğin, kullanıcı bir mezar vurgusu ölü anahtarı ve ardından 'a' harfini yazdığında sonuç 'à' olur.

Ölü anahtar yönetimi hakkında daha fazla bilgi için KeyCharacterMap.getDeadChar bakın.

Yorumlar

Yorum satırları '#' ile başlar ve satırın sonuna kadar devam eder. Bunun gibi:

# A comment!

Boş satırlar dikkate alınmaz.

Tuş kombinasyonları davranışlarla nasıl eşlenir?

Kullanıcı bir tuşa bastığında sistem, o tuşa basılması ve o anda basılan değiştiricilerin kombinasyonuyla ilişkili davranışı arar.

ÜST KRKT + A

Kullanıcının A ve SHIFT tuşlarına birlikte bastığını varsayalım. Sistem ilk önce KEYCODE_A ile ilişkili özellik ve davranış kümesini bulur.

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

Sistem, özel olan label ve number özelliklerini göz ardı ederek, özellikleri baştan sona ve soldan sağa doğru tarar.

Karşılaşılan ilk özellik base . base özelliği, hangi değiştiricilere basıldığına bakılmaksızın her zaman bir tuşa uygulanır. Aşağıdaki özellikler tarafından geçersiz kılınmadığı sürece, esasen anahtarın varsayılan davranışını belirtir. base özellik bu tuşa basıldığında geçerli olduğundan, sistem davranışının 'a' olduğunu not eder ( a karakterini yazın).

Daha sonra sistem, herhangi birinin base daha spesifik olması durumunda sonraki özellikleri taramaya devam eder ve onu geçersiz kılar. SHIFT + A tuşuna basıldığında da geçerli olan shift ile karşılaşır. Böylece sistem, base özelliğin davranışını göz ardı etmeye karar verir ve 'A' olan shift özelliğiyle ilişkili davranışı seçer ( A karakterini yazın).

Daha sonra tabloyu taramaya devam eder, ancak bu tuş basımına başka hiçbir özellik uygulanmaz (CAPS LOCK kilitli değildir, ne CONTROL tuşuna basılmıştır, ne ALT tuşuna basılmıştır ve ne META tuşuna basılmıştır).

Dolayısıyla SHIFT + A tuş kombinasyonunun sonuç davranışı 'A' olur.

KONTROL + A

Şimdi kullanıcı A ve CONTROL tuşlarına birlikte basarsa ne olacağını düşünün.

Daha önce olduğu gibi sistem özellikler tablosunu tarayacaktı. base özelliğin uygulandığını fark edecek, ancak sonunda control özelliğine ulaşana kadar taramaya devam edecektir. Olduğu gibi, control özelliği base sonra görünür, böylece davranışı base davranışı geçersiz kılar.

Yani CONTROL + A tuş birleşimi için ortaya çıkan davranış none olur.

KAÇMAK

Şimdi kullanıcının ESCAPE'e bastığını varsayalım.

key ESCAPE {
    base:                               fallback BACK
    alt, meta:                          fallback HOME
    ctrl:                               fallback MENU
}

Bu kez sistem, bir geri dönüş davranışı olan fallback BACK davranışını elde eder. Hiçbir karakter değişmezi görünmediğinden, hiçbir karakter yazılmayacaktır.

Anahtar işlenirken sistem ilk olarak uygulamaya KEYCODE_ESCAPE teslim edecektir. Uygulama bunu başaramazsa, sistem tekrar deneyecektir ancak bu sefer, geri dönüş davranışının gerektirdiği şekilde uygulamaya KEYCODE_BACK teslim edecektir.

Dolayısıyla, KEYCODE_ESCAPE tanıyan ve destekleyen uygulamalar, onu olduğu gibi işleme fırsatına sahiptir, ancak bunu yapmayan diğer uygulamalar bunun yerine, anahtarı KEYCODE_BACK gibi ele alan geri dönüş eylemini gerçekleştirebilir.

NUM LOCK ile veya NUM LOCK olmadan NUMPAD_0

Sayısal tuş takımı tuşlarının, NUM LOCK tuşunun kilitli olup olmamasına bağlı olarak çok farklı anlamları vardır.

Aşağıdaki anahtar bildirimi, NUM LOCK'a basıldığında KEYCODE_NUMPAD_0 0 yazmasını sağlar. NUM LOCK'a basılmadığında anahtar uygulamaya her zamanki gibi iletilir ve işlenmezse bunun yerine KEYCODE_INSERT geri dönüş anahtarı teslim edilir.

key NUMPAD_0 {
    label, number:                      '0'
    base:                               fallback INSERT
    numlock:                            '0'
    ctrl, alt, meta:                    none
}

Görebildiğimiz gibi, geri dönüş tuşu bildirimleri, tam bilgisayar tarzı bir klavyede bulunan tüm tuşları tanımayan veya doğrudan desteklemeyen eski uygulamalarla uyumluluğu büyük ölçüde artırır.

Örnekler

Tam klavye

# 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
}

Alfanümerik klavye

# 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'
}

Oyun pedi

# 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
}

Uyumluluk notu

Android Honeycomb 3.0'dan önce, Android anahtar karakter haritası çok farklı bir sözdizimi kullanılarak belirtiliyordu ve derleme sırasında ikili dosya biçiminde ( .kcm.bin ) derleniyordu.

Yeni format aynı .kcm uzantısını kullansa da sözdizimi oldukça farklıdır (ve çok daha güçlüdür).

Android Honeycomb 3.0'dan itibaren, tüm Android anahtar karakter eşleme dosyalarının bu belgede açıklanan yeni sözdizimini ve düz metin dosyası biçimini kullanması gerekir. Eski sözdizimi desteklenmiyor ve eski .kcm.bin dosyaları sistem tarafından tanınmıyor.

Dil notu

Android şu anda çok dilli klavyeleri desteklemiyor. Ayrıca yerleşik genel anahtar karakter haritası, ABD İngilizcesi klavye düzenini varsayar.

OEM'lerin, klavyeleri başka diller için tasarlanmışsa, özel tuş karakter haritaları sağlamaları teşvik edilir.

Android'in gelecek sürümleri, çok dilli klavyeler veya kullanıcı tarafından seçilebilen klavye düzenleri için daha iyi destek sağlayabilir.

Doğrulama

Anahtar Haritaları Doğrula aracını kullanarak anahtar karakter haritası dosyalarınızı doğruladığınızdan emin olun.