File peta karakter kunci (.kcm
file) bertanggung jawab untuk kombinasi pemetaan
kode tombol Android dengan pengubah ke karakter Unicode.
File tata letak kunci khusus perangkat diperlukan untuk semua perangkat internal (bawaan) perangkat input yang memiliki kunci, jika hanya untuk memberi tahu sistem bahwa perangkat hanya memiliki tujuan khusus (bukan keyboard penuh).
File tata letak tombol khusus perangkat bersifat opsional untuk keyboard eksternal, dan sering kali tidak diperlukan sama sekali. Sistem menyediakan peta karakter kunci generik yang cocok untuk banyak {i>keyboard<i} eksternal.
Jika tidak ada file tata letak kunci khusus perangkat yang tersedia, maka sistem akan pilih {i>default<i}.
Lokasi
File peta karakter kunci terletak berdasarkan vendor USB, produk (dan versi opsional) ID atau nama perangkat input.
Jalur berikut digunakan secara berurutan.
/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
Ketika membuat jalur file yang berisi nama perangkat, semua karakter pada nama perangkat selain '0'-'9', 'a'-'z', 'A'-'Z', '-' atau '_' akan diganti dengan '_'.
File peta karakter kunci umum
Sistem menyediakan file peta karakter kunci bawaan khusus yang disebut Generic.kcm
.
Peta karakter kunci ini dimaksudkan untuk mendukung berbagai standar
keyboard.
Jangan ubah peta karakter kunci generik.
File peta karakter kunci virtual
Sistem menyediakan file peta karakter kunci bawaan khusus yang disebut Virtual.kcm
yang digunakan oleh
perangkat {i>keyboard<i} virtual.
Perangkat keyboard virtual adalah perangkat input sintetis dengan ID -1
(lihat KeyCharacterMap.VIRTUAL_KEYBOARD
). Ada di semua perangkat Android
dimulai dengan Android Honeycomb 3.0. Tujuan perangkat keyboard virtual
adalah untuk menyediakan perangkat input {i>built-in<i}
yang dapat digunakan untuk memasukkan
penekanan tombol ke dalam aplikasi oleh IME atau dengan uji instrumentasi, bahkan
untuk perangkat yang tidak memiliki {i>keyboard<i} bawaan.
Keyboard virtual diasumsikan memiliki tata letak QWERTY penuh yang hal yang sama di semua perangkat. Hal ini memungkinkan aplikasi untuk menginjeksikan menekan tombol menggunakan perangkat {i>keyboard<i} virtual dan selalu mendapatkan hasil yang sama.
Jangan ubah peta karakter kunci virtual.
Sintaksis
File peta karakter kunci adalah file teks biasa yang terdiri dari jenis keyboard dan satu set deklarasi kunci.
Deklarasi jenis keyboard
Deklarasi jenis keyboard menjelaskan perilaku keyboard secara keseluruhan. File peta karakter harus berisi deklarasi jenis keyboard. Agar lebih jelas, seringkali ditempatkan di bagian atas file.
type FULL
Jenis keyboard berikut dikenali:
-
NUMERIC
: Keyboard numerik (12 tombol).Keyboard numerik mendukung entri teks menggunakan pendekatan multi-ketuk. Anda mungkin perlu mengetuk tombol beberapa kali untuk membuat huruf atau simbol yang diinginkan.
Jenis keyboard ini umumnya dirancang untuk mengetik dengan ibu jari.
Sesuai dengan
KeyCharacterMap.NUMERIC
. -
PREDICTIVE
: Keyboard dengan semua huruf, tetapi dengan lebih dari satu huruf per tombol.Jenis keyboard ini umumnya dirancang untuk mengetik dengan ibu jari.
Sesuai dengan
KeyCharacterMap.PREDICTIVE
. -
ALPHA
: Keyboard dengan semua huruf, dan mungkin beberapa angka.Keyboard alfabet mendukung entri teks secara langsung tetapi mungkin memiliki {i>layout<i} dengan faktor bentuk yang kecil. Berbeda dengan keyboard
FULL
, beberapa simbol hanya dapat diakses dengan menggunakan pemilih karakter pada layar. Selain itu, untuk meningkatkan kecepatan dan akurasi pengetikan, framework ini menyediakan kemampuan khusus untuk keyboard alfabet seperti kapitalisasi otomatis dan tombol SHIFT dan ALT terkunci.Jenis keyboard ini umumnya dirancang untuk mengetik dengan ibu jari.
-
FULL
: Keyboard bergaya PC lengkap.Keyboard lengkap berperilaku seperti keyboard PC. Semua simbol diakses secara langsung dengan menekan tombol pada {i>keyboard<i} tanpa dukungan di layar atau kemampuan seperti sebagai kapitalisasi otomatis.
Jenis keyboard ini umumnya dirancang untuk mengetik dengan dua tangan secara penuh.
-
SPECIAL_FUNCTION
: Keyboard yang hanya digunakan untuk menjalankan fungsi kontrol sistem bukan untuk mengetik.Keyboard fungsi khusus hanya terdiri dari tombol yang tidak dapat dicetak seperti HOME dan POWER yang sebenarnya tidak digunakan untuk mengetik.
Peta karakter tombol Generic.kcm
dan Virtual.kcm
adalah keyboard FULL
.
Deklarasi tombol
Setiap deklarasi kunci terdiri dari kata kunci key
diikuti dengan kode kunci Android
nama, kurung kurawal terbuka, kumpulan properti dan perilaku, serta kurung kurawal tutup.
key A { label: 'A' base: 'a' shift, capslock: 'A' ctrl, alt, meta: none }
Properti
Setiap properti kunci menetapkan pemetaan dari kunci ke perilaku. Untuk membuat file peta karakter kunci lebih ringkas, beberapa properti dapat dipetakan ke perilaku yang sama dengan memisahkannya dengan koma.
Pada contoh di atas, properti label
diberi perilaku 'A'
.
Demikian pula, properti ctrl
, alt
, dan meta
ditetapkan secara bersamaan
perilaku none
.
Properti berikut dikenali:
-
label
: Menentukan label yang dicetak secara fisik pada kunci, saat kunci tersebut terdiri dari satu karakter. Ini adalah nilai yang dimunculkan oleh metodeKeyCharacterMap.getDisplayLabel
. -
number
: Menentukan perilaku (karakter yang harus diketik) saat input tampilan teks memiliki fokus, seperti saat pengguna mengetik nomor telepon.Keyboard ringkas sering menggabungkan beberapa simbol menjadi satu tombol, sehingga kunci yang sama dapat digunakan untuk mengetik
'1'
dan'a'
atau'#'
dan'q'
, mungkin. Untuk kunci ini, propertinumber
harus disetel untuk menunjukkan simbol mana harus diketik dalam konteks numerik, jika ada.Beberapa "numerik" standar simbol adalah angka
'0'
sampai'9'
,'#'
,'+'
,'('
,')'
,','
, dan'.'
. -
base
: Menentukan perilaku (karakter yang harus diketik) saat tidak ada pengubah ditekan. -
<pengubah> atau <modifier1>
+
<modifier2>+
...: Menentukan perilaku (karakter yang harus diketik) saat tombol ditekan dan semua pengubah yang ditentukan aktif.Misalnya, properti pengubah
shift
menentukan perilaku yang berlaku saat baik tombol SHIFT KIRI atau SHIFT KANAN ditekan.Demikian pula, properti pengubah
rshift+ralt
menentukan perilaku yang berlaku ketika pengubah SHIFT KANAN dan ALT KANAN ditekan secara bersamaan.
Pengubah berikut dikenali dalam properti pengubah:
shift
: Berlaku saat pengubah SHIFT KIRI atau SHIFT KANAN ditekan.lshift
: Berlaku saat pengubah SHIFT KIRI ditekan.rshift
: Berlaku saat pengubah SHIFT KANAN ditekan.alt
: Berlaku saat pengubah LEFT ALT atau RIGHT ALT ditekan.lalt
: Berlaku saat pengubah LEFT ALT ditekan.ralt
: Berlaku saat pengubah ALT RIGHT ditekan.ctrl
: Berlaku saat pengubah LEFT CONTROL atau RIGHT CONTROL ditekan.lctrl
: Berlaku saat pengubah LEFT CONTROL ditekan.rctrl
: Berlaku saat pengubah RIGHT CONTROL ditekan.meta
: Berlaku saat tombol META LEFT META atau RIGHT META ditekan.lmeta
: Berlaku saat pengubah META LEFT ditekan.rmeta
: Berlaku saat pengubah META RIGHT ditekan.sym
: Berlaku saat pengubah SYMBOL ditekan.fn
: Berlaku saat pengubah FUNCTION ditekan.capslock
: Berlaku saat pengubah CAPS LOCK terkunci.numlock
: Berlaku saat pengubah NUM LOCK terkunci.scrolllock
: Berlaku saat pengubah SCROLL LOCK terkunci.
Urutan properti yang dicantumkan bersifat signifikan. Saat memetakan kunci untuk perilaku, sistem memindai semua properti yang relevan secara berurutan dan menampilkan perilaku yang dapat diterapkan yang ditemukannya.
Akibatnya, properti yang ditetapkan kemudian menggantikan properti yang yang ditentukan sebelumnya untuk kunci tertentu.
Perilaku
Setiap properti dipetakan ke perilaku. Perilaku yang paling umum adalah mengetik karakter, tapi ada yang lain.
Perilaku berikut dikenali:
-
none
: Tidak mengetik karakter.Perilaku ini merupakan setelan default saat tidak ada karakter yang ditentukan. Menentukan
none
bersifat opsional tetapi dapat meningkatkan kejelasan. -
'X'
: Mengetik literal karakter yang ditentukan.Perilaku ini menyebabkan karakter tertentu dimasukkan ke dalam fungsi tampilan teks. Literal karakter dapat berupa karakter ASCII, atau salah satu urutan escape berikut:
'\\'
: Mengetik karakter garis miring terbalik.'\n'
: Ketik karakter baris baru (gunakan ini untuk ENTER / Kembalikan).'\t'
: Ketik karakter TAB.'\''
: Mengetik karakter apostrof.'\"'
: Mengetik karakter kutipan.'\uXXXX'
: Ketik karakter Unicode yang titik kodenya diberikan dalam heksadesimal oleh XXXX.
-
fallback
<Android key code name>: Melakukan tindakan default jika tombolnya tidak ditangani oleh aplikasi.Perilaku ini menyebabkan sistem melakukan simulasi penekanan tombol yang berbeda saat aplikasi tidak menangani kunci yang ditentukan secara native. Ini digunakan untuk mendukung perilaku default untuk kunci baru yang tidak semua aplikasi tahu cara menanganinya, seperti ESCAPE atau tombol keypad numerik (saat numlock tidak ditekan).
Saat perilaku fallback dilakukan, aplikasi akan menerima dua penekanan tombol: satu untuk kunci asli dan satu lagi untuk kunci penggantian yang dipilih. Jika aplikasi menangani kunci asli saat kunci naik, maka kunci fallback acara akan dibatalkan (
KeyEvent.isCanceled
akan mengembalikantrue
).
Sistem mencadangkan dua karakter Unicode untuk melakukan fungsi khusus:
-
'\uef00'
: Jika perilaku ini dilakukan, tampilan teks akan menggunakan dan menghapus empat karakter sebelum kursor, menafsirkannya sebagai digit heksadesimal, dan memasukkan titik kode Unicode yang sesuai. -
'\uef01'
: Jika perilaku ini dilakukan, tampilan teks akan menampilkan dialog pemilih karakter yang berisi simbol lain-lain.
Sistem mengenali karakter Unicode berikut sebagai kombinasi karakter diakritik karakter utama:
'\u0300'
: Aksen nontirus.'\u0301'
: Aksen tirus.'\u0302'
: Aksen sirkumfleks.'\u0303'
: Aksen tanda gelombang.'\u0308'
: Aksen Umlaut.
Saat {i>dead key<i} diketik diikuti oleh karakter lain, {i>dead key<i} dan yang berikutnya karakter. Misalnya, saat pengguna mengetik aksen nontirus yang mati diikuti dengan huruf 'a', hasilnya adalah 'à'.
Lihat KeyCharacterMap.getDeadChar
untuk informasi selengkapnya tentang penanganan kunci mati.
Komentar
Baris komentar dimulai dengan '#' dan terus sampai ke akhir baris. Seperti ini:
# A comment!
Baris kosong akan diabaikan.
Cara kombinasi tombol dipetakan ke perilaku
Ketika pengguna menekan tombol, sistem mencari perilaku yang terkait dengan kombinasi penekanan tombol dan pengubah yang ditekan saat ini.
SHIFT + A
Misalkan pengguna menekan A dan SHIFT secara bersamaan. Sistem mula-mula
mencari
kumpulan properti dan perilaku yang terkait dengan KEYCODE_A
.
key A { label: 'A' base: 'a' shift, capslock: 'A' ctrl, alt, meta: none }
Sistem memindai properti dari pertama hingga terakhir dan kiri ke kanan, mengabaikan
properti label
dan number
, yang bersifat khusus.
Properti pertama yang ditemukan adalah base
. Properti base
selalu berlaku untuk
tombol, tidak peduli pengubah
apa yang ditekan. Pada dasarnya alat ini
menentukan {i>default <i}
perilaku kunci kecuali jika
digantikan oleh properti berikut.
Karena properti base
berlaku untuk penekanan tombol ini, sistem akan membuat catatan
fakta bahwa perilakunya adalah 'a'
(ketik karakter a
).
Sistem kemudian terus memindai properti berikutnya jika ada properti
lebih spesifik dari base
dan menggantinya. Error ini menemukan shift
yang
juga berlaku untuk tombol
tekan SHIFT + A. Jadi sistem memutuskan
untuk mengabaikan
perilaku properti base
dan memilih perilaku yang terkait dengan
properti shift
, yaitu 'A'
(ketik karakter A
).
Kemudian, tabel akan terus memindai tabel, namun tidak ada properti lain yang diterapkan pada tabel ini penekanan tombol (CAPS LOCK tidak terkunci, tidak ada tombol CONTROL yang ditekan, juga tombol ALT ditekan dan tidak ada tombol META yang ditekan).
Jadi, perilaku yang dihasilkan untuk kombinasi tombol SHIFT + A adalah 'A'
.
KONTROL + A
Sekarang pertimbangkan apa yang akan terjadi jika pengguna menekan A dan CONTROL secara bersamaan.
Seperti sebelumnya, sistem akan memindai tabel properti. Asisten Google akan memperhatikan
bahwa properti base
diterapkan, tetapi juga akan terus memindai hingga
akhirnya mencapai properti control
. Saat dijalankan, control
properti muncul setelah base
sehingga perilakunya mengganti perilaku base
.
Jadi, perilaku yang dihasilkan untuk kombinasi tombol CONTROL + A adalah none
.
ESCAPE
Sekarang, anggaplah pengguna menekan ESCAPE.
key ESCAPE { base: fallback BACK alt, meta: fallback HOME ctrl: fallback MENU }
Kali ini sistem mendapatkan perilaku fallback BACK
, perilaku penggantian.
Karena tidak ada literal karakter yang muncul, tidak ada karakter yang akan diketik.
Saat memproses kunci tersebut, sistem akan mengirimkan KEYCODE_ESCAPE
terlebih dahulu ke
aplikasi. Jika aplikasi tidak menanganinya, maka sistem akan mencoba
sekali lagi, tetapi kali ini, perintah tersebut akan mengirimkan KEYCODE_BACK
ke aplikasi sebagai
yang diminta oleh perilaku penggantian.
Jadi, aplikasi yang mengenali dan mendukung KEYCODE_ESCAPE
memiliki
peluang untuk menanganinya apa adanya, tetapi aplikasi lain yang tidak dapat
melakukan tindakan penggantian memperlakukan kunci seolah-olah kunci tersebut adalah KEYCODE_BACK
.
NUMPAD_0 dengan atau tanpa NUM LOCK
Tombol keypad numerik memiliki interpretasi yang sangat berbeda tergantung pada tombol NUM LOCK terkunci.
Deklarasi kunci berikut memastikan bahwa KEYCODE_NUMPAD_0
mengetik 0
saat NUM LOCK ditekan. Ketika NUM LOCK tidak ditekan, tombol terkirim
ke aplikasi seperti biasa, dan jika tidak ditangani, maka penggantian
tombol KEYCODE_INSERT
akan dikirim sebagai gantinya.
key NUMPAD_0 { label, number: '0' base: fallback INSERT numlock: '0' ctrl, alt, meta: none }
Seperti yang dapat kita lihat, deklarasi kunci penggantian sangat meningkatkan kompatibilitas pada aplikasi lama yang tidak mengenali atau mendukung langsung semua kunci yang ada pada {i> keyboard<i} bergaya {i>full PC<i}.
Contoh
Keyboard penuh
# 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 }
Keyboard alfanumerik
# 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' }
Game pad
# 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 }
Catatan kompatibilitas
Sebelum Android Honeycomb 3.0, peta karakter kunci Android telah ditentukan
menggunakan sintaks yang sangat berbeda
dan dikompilasi ke dalam format {i>file<i} biner
(.kcm.bin
) pada waktu build.
Meskipun format barunya menggunakan ekstensi yang sama .kcm
, sintaksisnya cukup
berbeda (dan jauh lebih ampuh).
Mulai Android Honeycomb 3.0, semua file peta karakter kunci Android harus menggunakan
sintaks baru dan format file teks biasa
yang dijelaskan dalam dokumen ini.
Sintaksis lama tidak didukung dan file .kcm.bin
lama tidak dikenali
oleh sistem.
Catatan bahasa
Saat ini Android tidak mendukung keyboard multibahasa. Selain itu, peta karakter tombol generik bawaan mengasumsikan tata letak keyboard Inggris AS.
OEM didorong untuk menyediakan peta karakter tombol kustom untuk keyboard mereka jika didesain untuk bahasa lain.
Versi Android mendatang mungkin menyediakan dukungan yang lebih baik untuk keyboard multibahasa atau tata letak {i>keyboard<i} yang dapat dipilih pengguna.
Validasi
Pastikan untuk memvalidasi file peta karakter kunci Anda menggunakan Alat Validasi Keymap.