Jbak Keyboard
logo Jbak keyboard - custom keyboard

You can create your own keyboard or modify existing. Or even add to Jbak keyboard new language

This is all integrated keyboards in xml format. You can put some any xml file to your android and edit it.

Internal keyboards of Jbak keyboard, 17 Kb
All internal keyboards in xml

Keyboards files located in /mnt/sdcard/jbakKeyboard/keyboards/ .

After copiyng you need to switch keyboard in settings.

For application settings - open system setting, Language and keyboard, Jbak Keyboard settings. Or you can make long-press of key 123 on keyboard for main menu, which contains needed item.

In application settings switch Languages and keyboard and press button with keyboard icon against needed language. Switch to needed keyboard and press "Save".

Keyboard filename

Name of keyboard file starts with two-letters code of language. For example,
ru_Wide keys.xml - keyboard Wide keys for Russian
en_5 rows with numbers.xml - keyboard 5 rows with numbers for English
You can see all language codes by this link: http://en.wikipedia.org/wiki/List_of_ISO_639-1_codes

Also filename can starts from one of special values:

  • symbol - symbol keyboard (starts by pressing 123 on qwerty keyboard)
  • symbol2 - alternative symbol keyboard (starts by pressing Shift on symbol keyboard)
  • edittext - keyboard for text editing (starts by Shift long-press on main keyboard)
  • smile - keyboard for emoticons (starts by Enter long-press)
  • num - numerical keyboard for input phone numbers or integer values

Extension of keyboard file - always .xml . You must use UTF-8 encoding

Keyboard file format

Attributes android:keyWidth and android:horizontalGap sets in percent from screen width.
For example, android:keyWidth="10%p" - its 10% (40 pixels on screen width 400, and 80 - on 800).
This can be in pixels, for examples 10px , but this key will not scaled on different resolutions.

<Keyboard Tag contains values for all keyboard
xmlns:android="http://schemas.android.com/apk/res/android" - this must be always
   android:horizontalGap - gap from left side (default is 0)
   android:verticalGap - gap from top of keyboard to letters (default is 0)
   android:keyWidth - default key width (for keys, that not contains own attribute android:keyWidth

    <Row One line of keys. Contains list of keys

  • android:keyHeight="80%p"
    height of keyboard line in percent. If not present - 100%


      <Key Key. List of all possible attributes :

  • android:keyLabel="1\nq"
    label in format "additional_text|delimeter \n|main text". If delimeter \n not present - all label interpret as main text. Symbol \ (backslash) need to be duplicated (\\). Some symbols need to be as standard xml entity (for example &amp; - for symbol &) There are some special values: d_vr - voice input, tab - tabulation, opt - run main menu
  • android:codes="32"
    Code of short press. Not need for letters. Its can be symbol in UNICODE or one of control codes (see Key codes). Also can contain several codes, delimited by commas (,). In this case short-press make swithc between these symbols For example, android:codes="97,98,99" - its switch between a,b,c.
  • android:keyIcon
    Key icon. See Key icons
  • android:keyWidth="32%p"
    Key width in percent. Can be float value, for example "12.5%p".
  • android:horizontalGap
    Gap of key from previous key or left side of keyboard Default gap is 0.
  • android:isSticky
    If "true" - key has 2 states, pressed or released. This used now for Shift и Select, and not for another keys
  • android:isRepeatable
    If "true" - by holding key action for short-press repeats. Usable for space and backspace
  • android:isModifier
    "true" - for Shift only. Now another modifiers not in use.
  • android:popupCharacters
    String of characters. If defined - by long-press opens small keyboards, with these characters.
  • android:longCode
    Code for long-press (see Key codes)
  • android:noColor
    If "true" - then icon draws on key as is, without colorizing to user's skin color
  • android:specKey
    Only for skins, which contains two keys backgrounds. "true" - for key background used additional background, "false" - main background
  • android:goQwerty
    Only for additional keyboards (symbol, smile, etc). If "true" - after pressing this key opens main qwerty keyboard. If "false" - keyboard not changed after pressing.


      <Key ... />
       <Key ... />
  <Row ...>
  <Replace from="11" to=":)"/> If user type text 11 - then this text will force replaced with :) . Text in attribute from is case sensitive

Key codes

For letters key you an use symbols codes in UNICODE. Codes can be in decimal or hexadecimal encoding (in second case code starts from 0x or #) For example, english letter 'а' can be defined as 97 or 0x61.

Cursor keys:

19 - up
20 - down
21 - left
22 - right
-305 - Home (move to paragraph start)
-306 - End (move to paragraph end)
-310 - Select - enable/disable text selection on cursor keys an home/end

Text commands:

-320 - Copy (copy selected text)
-321 - Paste (paste text from clipboard)
-322 - Cut (copy selected text and remove it )
-323 - Select All (select all text in input field)

Qwerty - keyboard:

32 - key space
10 - key Enter
-1 - key Shift
-5 - key Baсkspace
-2 - key for call symbol keyboard (123) or return to qwerty (ABC)
-3 - key, which close keyboard
-20 - key for switching between language

Internal codes:

-500 - show main menu
-501 - voice input
-502 - run templates
-503 - run app settings
-504 - run multi clipboard

Key icons

Can be one of internal icons:
@drawable/sym_keyboard_delete - Backspace
@drawable/sym_keyboard_done - Cancel (key, which close keyboard)
@drawable/sym_keyboard_return - Enter
@drawable/sym_keyboard_shift - Shift
@drawable/sym_keyboard_space - Space

For example, android:keyIcon="@drawable/sym_keyboard_space" shows icon space on keyboard

Also it can be internal icon png, which locates in /mnt/sdcard/jbakKeyboard/keyboards .
For example, android:keyIcon="myIcons/icon1.png" shows on key icon /mnt/sdcard/jbakKeyboard/keyboards/myIcons/icon1.png
Icons must be white on transparent background. This is for colorizing into user's skin color.
If you don't want this colorizing - just add attribute android:noColor="true".

With best regards,
Juriy Bakunin aka JBAK