Большинство пользователей на клавиатуре устраивает почти всё, процентов на 99. Буквы есть, текст набирает, что еще надо? Но оставшийся один процент постоянно даёт о себе знать.
Кому-то не нравится голосовой ввод на кнопке переключения языков. Кого-то раздражает кнопка закрытия клавиатуры - "всё равно закрыть можно нажатием back - так зачем эта кнопка?"
А кому-то вообще нужно отдельной кнопкой символ копирайта.
Есть и другие пользователи, которым в корне не нравится вся клавиатура. Вот взять бы да поставить вместо неё другую...
Сделать всё это в настройках нереально, слишком много будет настроек. Но есть другой путь - создание собственной клавиатуры. Можно отредактировать существующую раскладку, а можно создать свою, полностью с нуля. И даже добавить в программу язык, которого там нету.
Вот встроенные в программу клавиатуры. Человеку, знакомому с форматом xml, уже после первого просмотра станет многое понятно:
А вот клавиатура от Али Гамидова, изображённая на скриншоте справа. Инструкция по установке - внутри архива:
Файлы клавиатур выкладываются в папку /mnt/sdcard/jbakKeyboard/keyboards/ .
Далее клавиатуру необходимо выбрать в настройках.
Чтобы попасть в настройки программы - открываем системные настройки, Языки и клавиатуры -> Настройки Jbak Keyboard. Либо удерживаем клавишу 123 на клавиатуре.
В окне настроек программы выбираем Языки и клавиатуры, нажимаем кнопку с клавиатурой напротив нужного языка. Пролистываем список клавиатур, на нужной нажимаем кнопку "Сохранить".
Название файла клавиатуры
Название файла клавиатуры начинается с двухбуквенного кода языка, после него следует подчёркивание. Например,
ru_Wide keys.xml - клавиатура Wide keys для русского языка
en_5 rows with numbers.xml - клавиатура 5 rows with numbers для английского языка
Коды всех языков мира можно узнать по ссылке: http://ru.wikipedia.org/wiki/Коды_языков
Вместо кода языка может быть одно из значений:
- symbol - клавиатура для набора символов (запускается по нажатию кнопки 123 с основной клавиатуры)
- symbol2 - дополнительная клавиатура для набора символов (запускается по нажатию клавиши Shift на символьной клавиатуре)
- edittext - клавиатура для редактирования текста (запускается по удержанию клавиши Shift на основной клавиатуре)
- smile - клавиатура для ввода смайликов (запускается по удержанию клавиши Enter)
- num - числовая клавиатура, которая открывается в полях ввода телефонных номеров или числовых значений
Расширение файла - .xml . Файл обязательно должен быть в кодировке UTF-8
Формат файла клавиатуры
Аттрибуты android:keyWidth и android:horizontalGap рекомендуется задавать в процентах от общей ширины экрана.
Например, android:keyWidth="10%p" - задаст ширину клавиши в 10 %
Можно и в пикселях, например 10px , но этот размер не будет масштабироваться в зависимости от разрешения экрана
<Keyboard тэг содержит значения для всей клавиатуры
xmlns:android="http://schemas.android.com/apk/res/android" - это должно быть обязательно и именно в таком виде
android:horizontalGap - отступ клавиш от левого края клавиатуры (в пикселях и в процентах)
android:verticalGap - отступ клавиш от верха клавиатуры
android:keyWidth - ширина клавиши по умолчанию (для тех клавиш, у которых не задан свой аттрибут android:keyWidth
>
<Row > Строка клавиатуры. Внутри тэга содержатся клавиши, относящиеся к данной строке
<Key Отдельная клавиша. Список всех возможных атрибутов:
- android:keyLabel="1\nq"
текстовая метка для клавиши в виде "текст_для_ввода_по_долгому_нажатию|разделитель \n|основной_текст". Если разделителя \n нет - то содержимое метки будет показано как основной текст клавиатуры.
Символ \ (обратный слэш) необходимо дублировать. Также некоторые символы вводятся по правилам xml (например & - для &)
Есть несколько специальных значений: d_vr - голосовой ввод, tab - табуляция, opt - запуск основного меню клавиатуры
- android:codes="32"
Код клавиши. Для буквенных клавиш не требуется.
Содержит код символа для ввода в кодировке UNICODE или один из управляющих кодов (см. раздел Коды клавиш).
Также может содержать несколько буквенных кодов, через запятую. Тогда при коротких нажатиях клавиш происходит перебор между указанными кодами
Например, android:codes="1081,1082,1083" - перебирает буквы й,к,л.
- android:keyIcon
Иконка клавиши. Подробно в разделе Иконки клавиш
- android:keyWidth="32%p"
Ширина клавиши в процентах от ширины экрана. Может быть дробным значением, например "12.5%p".
Если общая ширина клавиш в пределах тэга Row больше 100% - клавиши вылезут за пределы экрана.
- android:horizontalGap
Отступ клавиши от левого края экрана или от предыдущей клавиши
Если не задан - оступ нулевой
- android:isSticky
Если значение "true" - клавиша имеет 2 положения, нажата и отпущена. В нажатом положении на клавише появляется зеленый кружок
Нужно для клавиш Shift и Select, для остальных не имеет смысла
- android:isRepeatable
Если значение "true" - при удержании клавиши ввод повторяется. Используется для клавиш пробел и backspace
- android:isModifier
"true" - для клавиши Shift. Других модификаторов пока нету
- android:popupCharacters
Строка, содержащая набор символов. Если задана - по удержанию клавиши выводится маленькая клавиатура, позволяющая ввести каждый из указанных символов
- android:longCode
Код, выполняющийся по удержанию клавиши
Содержит код символа для ввода в кодировке UNICODE или один из управляющих кодов (см. раздел Коды клавиш)
- android:noColor
Если "true" - изображение на клавише не окрашивается в цвет текста и используется как есть. Имеет смысл только для клавиш с аттрибутом keyIcon
- android:specKey
Имеет смысл в скинах, где функциональные клавиши отличаются оформлением от буквенных.
"true" - клавиша рисуется с оформлением функциональных клавиш (как например клавиша Shift), "false" - со стандартным оформлением
Если при текущем скине все клавиши рисуются с одинаковым фоном - этот атрибут игнорируется.
Если не задан - программа сама выбирает нужный фон.
/>
<Key ... />
<Key ... />
</Row>
<Row ...>
</Keyboard>
Коды клавиш
Для буквенных клавиш используются коды символов в кодировке unicode.
Коды могут быть записаны как в десятичной, так и в шестнадцатеричной системе (в этом случае число начинается c 0x или #)
Например, русская буква 'а' может быть записана как 1072 или 0x430.
Клавиши управления курсором:
19 - вверх
20 - вниз
21 - влево
22 - вправо
-305 - Home (переход в начало абзаца)
-306 - End (переход в конец абзаца)
-310 - Select - включает/выключает выделение текста
Текстовые команды:
-320 - Copy (копирует выбранный текст)
-321 - Paste (вставляет текст из буфера обмена)
-322 - Cut (копирует выбранный текст в буфер обмена и удаляет его)
-323 - Select All (выделяет весь текст в поле ввода)
Qwerty - клавиатура:
32 - клавиша пробел
10 - клавиша Enter
-1 - клавиша Shift
-5 - клавиша Baсkspace
-2 - код клавиши для вызова символьной клавиатуры (123) или возврата на qwerty (ABC)
-3 - код клавиши, закрывающей клавиатуру
-20 - переключение языка ввода
Внутренние коды:
-500 - запуск главного меню
-501 - голосовой ввод
-502 - запуск шаблонов
-503 - запуск настроек программы
-504 - запуск буфера обмена
Иконки клавиш
В качестве иконки может быть задана одна из встроенных иконок:
@drawable/sym_keyboard_delete - Иконка клавиши Backspace
@drawable/sym_keyboard_done - Иконка клавиши Cancel (клавиша, которая закрывает клавиатуру)
@drawable/sym_keyboard_return - Иконка клавиши Enter
@drawable/sym_keyboard_shift - Иконка клавиши Shift
@drawable/sym_keyboard_space - Иконка клавиши Пробел
Например, android:keyIcon="@drawable/sym_keyboard_space" отобразит на клавише иконку пробела
Кроме того, можно задать путь к иконке, которая расположена в папке /mnt/sdcard/jbakKeyboard/keyboards .
Например, android:keyIcon="myIcons/icon1.png" отобразит на клавише иконку /mnt/sdcard/jbakKeyboard/keyboards/myIcons/icon1.png
Иконки должны быть белыми на прозрачном фоне. При отрисовке они окрашиваются в цвет текста текущего скина пользователя.
Для использования цветных иконок необходимо задать атрибут android:noColor="true" - тогда иконка не будет окрашиваться в цвет текста.
====
программист - Юрий Бакунин aka JBAK
редактор - Владимир Каширин aka_SmIle
Одесса, 2007-2012