Главная

Практически по единогласному мнению пользователей, это лучшая клавиатура для андроид.
info Клавиатура jbak2 keyboard в Google play больше не публикуется! (как и другие мои программы)
Для некоторых действий, например написания на форуме, требуется регистрация.
Группа Гости имеет ограниченные возможности.
Все программы перечислены в таблице ниже, их можно скачивать без регистрации.
Альтернативное скачивание: бот в Telegram @Jbak2keyboardBot
Там-же можно скачать и браузер.
Для сокращения шапки, зарегистрируйтесь или войдите.
menu
Помочь проекту / Реклама на сайте

Главная

Категории:
Статьи по jbak2 keyboard [8]

Инструкция по созданию своей раскладки

Данная инструкция на английском языке, находится в приложении jbak2layout.

---
Последний раз редактировалось:
05.06.2023
 
ВНИМАНИЕ! 
В самом низу находится пример стандартной раскладки "псевдо Т9".

$I: Базовые сведения

Большинство пользователей на клавиатуре устраивает почти всё, процентов на 99. Буквы есть, текст набирает, что еще надо? Но оставшийся один процент постоянно даёт о себе знать. Кому-то не нравится голосовой ввод на кнопке переключения языков. Кого-то раздражает кнопка закрытия клавиатуры - "всё равно закрыть можно нажатием back - так зачем эта кнопка?" А кому-то вообще нужно отдельной кнопкой символ копирайта.
Есть и другие пользователи, которым в корне не нравится вся клавиатура. Вот взять бы да поставить вместо неё другую...
Сделать всё это в настройках нереально, слишком много будет настроек. Но есть другой путь - создание собственной клавиатуры. Можно отредактировать существующую раскладку, а можно создать свою, полностью с нуля. И даже добавить в программу язык, которого там нету.

Все файлы клавиатур пишутся в формате UTF-8. Человеку, знакомому с форматом xml, уже после первого просмотра станет многое понятно.

Файлы клавиатур выкладываются в папку /mnt/sdcard/jbak2Keyboard/keyboards/ .

Далее клавиатуру необходимо выбрать в настройках.

В окне настроек программы выбираем Языки и клавиатуры, нажимаем кнопку с клавиатурой напротив нужного языка. 
Пролистываем список клавиатур, на нужной нажимаем кнопку "Сохранить".

$I: Название файла клавиатуры

Название файла клавиатуры начинается с двухбуквенного кода языка, после него следует подчёркивание. Например,
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 - числовая клавиатура, которая открывается в полях ввода телефонных номеров или числовых значений
calc - раскладка калькулятора
hide - раскладка не будет отображаться в списке выбора языков (иногда бывает необходимо)
Расширение файла - .xml . Файл обязательно должен быть в кодировке UTF-8

$I: Формат файла клавиатуры

Все теги РЕГИСТРОЗАВИСИМЫ! Будьте внимательны.

Для удобства отладки, если какой-то тег для конкретной клавиши ошибочен, то выводится сообщение об ошибке с указанием в какой клавише по счёту от начала эта ошибка возникла.

Если любой тег в клавише начинается с xxx, то сообщение об ошибке подавляется.
Например, если указать android:keyLabel="adc", то сообщения об ошибке не будет. Всё написано верно.
А если указать android:keylabel="abc", то будет сообщение об ошибке.
Если же указать android:xxxkeyLabel="abc", то сообщения об ошибке не будет, но тег обработан не будет.

$I: ВАЖНО! О правилах xml
По правилам языка XML, внутри атрибутов вместо некоторых символов необходимо писать особые значения:
& - & 
< - &lt;
> - &gt;
' - &apos;
" - &quot;
Если клавиатура не загружается - проверьте, нет ли в каком-то атрибуте одного из этих символов.

Атрибуты android:keyWidth и android:horizontalGap рекомендуется задавать в процентах от общей ширины экрана. 
Например, android:keyWidth="10%p" - задаст ширину клавиши в 10%
Можно и в пикселях, например 10px , но этот размер не будет масштабироваться в зависимости от разрешения экрана

ИМЕЙТЕ ВВИДУ:
По внутренней логике программы, есть только два типа раскладок для переключения стандартными кодами — языковые (ru, en, es и т.д) и все остальные (calc, num, symbol, smile и т.д).
Другими словами, такая схема переключения  работать будет стандартными кодами переключения:
en->symbol  (с вызовом раскладки на отдельной клавише)->num->en

а такая нет:
en->symbol (с вызовом раскладки на отдельной клавише)->num->symbol->en

Возврат из любой НЕ языковой раскладки стандартными кодами переключения раскладок,, всегда идёт на языковую.
Исключение составляет раскладка symbol2, если она из раскладки symbol вызывается клавишей Shift (если эта клавиша на обоих раскладках).
В остальных случаях, для переключения на вызывавшую НЕ языковую раскладку, нужно всегда прописывать отдельный вызов вызывавшей раскладки.
Учитывайте эту особенность при создании собственного КОМПЛЕКТА раскладок.

$I: Структура файла раскладки такова:
<Keyboard
 <Row>
  <Key теги />
  <Key теги />
  <Key теги />
  ...
 </Row>
<Row>
  <Key теги />
  <Key теги />
  <Key теги />
  ...
 </Row>
 ...
<includeReplace file="repl.txt"/>
<Replace from="11" to=":)"/>
</Keyboard>

Для каждой секции имеются свои тэги.

$I: ОТДЕЛЬНЫЙ ТИП РАСКЛАДКИ - С ПРОКРУТКОЙ.
У него упрощённый и специальный формат файла, отличающийся от основного.
Раскладки данного формата, можно использовать только для вспомогательных раскладок (НЕ ЯЗЫКОВЫХ!).
Наименование файла раскладки указывается по правилам выше.
Данные типы раскладок, можно применять для любых раскладок, КРОМЕ ОСНОВНЫХ — ЯЗЫКОВЫХ.

Пример:
<?xml version="1.0" encoding="utf-8"?>
<Keyboard xmlns:android="http://schemas.android.com/apk/res/android" android:typeKeyboard="scroll" >
<Row>
<Keys android:arrayKeys="En a b c d e f Ru а б в г д"
android:arrayAnchors="En Ru привет"
android:columns="2"
android:popupCharacters="abc { } [ ] / \ ( )" />
</Row>
</Keyboard>

Описание:
<Keyboard
xmlns:android="http://schemas.android.com/apk/res/android" - это должно быть обязательно и именно в таком виде.
Тэг может содержать только одно значение, указывающее что это раскладка с прокруткой - android:typeKeyboard="scroll"

Тэги <Row> и </Row> значений и практического смысла не имеют, но указываться должны обязательно и именно там, где и расположены в примере.

<Keys - содержит значения выводимых кнопок и навигации по раскладке.

android:arrayKeys="En a b c d e f Ru а б в г д" - перечисление через пробел всех букв, символов и слов, которые будут показаны на раскладке.

Также как в автодополнении и в полноэкранной маленькой клавиатуре, в теге можно создавать кнопки, например $[-303,$f#ɬ]. Формат "$[-303,<parameters>,$f#ɬ]" тоже можно использовать, но параметры не будут действовать.
Также в этих кнопках, вместо текста названия, можно использовать значки шрифта клавиатуры - как и в других случаях - префикс $f#. Для удобного добавления, используйте код -630.
И также, как и в других механизмах реализующих кнопки, вместо кода для выполнения, можно использовать шаблон - укажите его имя.
Из-за специфики прокручивающихся раскладок, коды будут выполняться не все. А также возможно другое некорректное поведение.

Использовать кнопки в качестве якорей нельзя.

android:arrayAnchors="En Ru привет" - перечисление кнопок-якорей, нажатие на которые, перемещает список кнопок раскладки к указанному значению.
Должны полностью соответствовать одному из значений из списка arrayKeys и не должны быть более 3 символов, иначе такой якорь не будет показан.

android:columns="2" - принудительная установка количества колонок для этой раскладки.
Необязательный тег.
Действует только если это значение меньше значения, установленного в программе для данной ориентации экрана.
Иногда, в некоторых раскладках, нужны широкие клавиши, которые не зависят от установленного в настройках программы значения для данной ориентации экрана.
Например, когда на клавишах нужно показать какой-то длинный текст.

android:smallLabel="10" - уменьшает конечный размер шрифта для обычных клавиш, на указанное число. Но не меньше 8-ми.

android:popupCharacters="abc { } [ ] / \ ( )" - пользовательские кнопки, для окна полноэкранной маленькой клавиатуры.
Формат такой-же как и в описании одноимённого тега из основного типа раскладки, но v2 в начале можно не указывать.

В нашем примере, на раскладке будут выведены клавиши En,a,b,c,d,e,f,Ru,а,б,в,г,д и кнопки якорей En и Ru.
А якорь "привет" будет проигнорирован, так как его длина больше трёх символов и он отсутствует в основном списке.
И наконец, при нажатии на кнопку с изображением клавиатуры, откроется окно маленькой клавиатуры, где, вместе с клавишами которые добавит программа, будут также и клавиши abc { } [ ] / \ ( ).


$I: ОСНОВНОЙ ТИП РАСКЛАДКИ. 
$I: Тэги Keyboard

 <Keyboard тэг содержит значения для всей клавиатуры

xmlns:android="http://schemas.android.com/apk/res/android" - это должно быть обязательно и именно в таком виде

   android:horizontalGap - отступ клавиш от левого края клавиатуры (в пикселях и в процентах)

   android:verticalGap - отступ клавиш от верха клавиатуры

   android:keyWidth - ширина клавиши по умолчанию (для тех клавиш, у которых не задан свой атрибут android:keyWidth). Значение по умолчанию - 10%p.

   android:typeKeyboard - отвечает за тип раскладки. Например, android:typeKeyboard="calculator" говорит программе, что это раскладка калькулятора и нужно включить индикатор калькулятора.
   Имеет значения calculator и scroll.

   android:extFont - свой шрифт для основных символов у этой раскладки.
   Поддерживаются форматы: ttf, otf, woff.
   Файл не должен превышать 250kb и находиться в папке keyboards. Или в подпапках указанной папки. Имя файла в таком случае указывается вместе с подпапкой: 
   
   android:extFont="Font/myFont.ttf"
   
   Если путь к файлу начинается с / , то указывается полный путь.
   
>

$I: Тэги Row

<Row Строка клавиатуры. Внутри тэга содержатся клавиши, относящиеся к данной строке

android:keyHeight="80%p"
Высота строки клавиш. Задается в процентах от высоты, заданой пользователем. Если не задано - 100%

android:keyWidth="80%p" 
Ширина строки клавиш. Задается в процентах от высоты, заданой пользователем. Если не задано - 100%

android:verticalGap="10%p"
Отступ ряда от предыдущего или от верха клавиатуры
>

$I: Тэги Key

ЗАМЕЧАНИЕ
Если тэг начинается с xxx, то сообщение об ошибке подавляется. Например, android:xxxkeyLabel="1\nq", android:xxxhorizontalGap="10%p".
Применяется при отладке.


<Key Отдельная клавиша. Список всех возможных атрибутов:

android:keyLabel="1\nq"
текстовая метка для клавиши в виде "текст_для_ввода_по_долгому_нажатию|разделитель \n|основной_текст". 
Если разделителя \n нет - то содержимое метки будет показано как основной текст клавиатуры. Символ \ (обратный слэш) необходимо дублировать. Также некоторые символы вводятся по правилам xml (например &amp; - для &) 

Есть несколько специальных значений: d_vr - голосовой ввод, tab - табуляция, opt - запуск основного меню клавиатуры

ШРИФТ КЛАВИАТУРЫ.
Для отображенния ИСКЛЮЧИТЕЛЬНО на клавишах клавиатуры, в программу добавлен собственный шрифт.
Для его значков задествовано пространство начиная с IPA-extensions в кодировке utf8.
Может применяться для лаконичности и уменьшения текста на клавишах клавиатуры (а также на кнопках в окне автодополнения, в полноэкранной маленькой клавиатуре и возможно других местах в будущем), совместно с  тегами codes и longCode, иначе в систему будет отправлено не то, что показывается на клавише.
Для использования знаков из него, обязательно должна быть включена настройка Шрифт клавиатуры во Внешнем виде.
Для удобства, при конструировании раскладки, воспользуйтесь кодом -630 и добавляйте нужные значки в тег keyLabel, отдельно для длинного и короткого нажатия. Данный код можно включить одним из пунктов в отображении главного меню.
Формат для вставки - $f#ɐ,
где "ɐ" - один из значков встроенного шрифта.
В данном случае, это символ перехода в начало текста. В тексте раскладки он выглядит так, а на клавише будет показан как и положено.


android:codes="32" 
Код клавиши. 
Для буквенных клавиш не требуется. Содержит код символа для ввода в кодировке UNICODE или один из управляющих кодов (см. раздел Коды клавиш). Также может содержать несколько буквенных кодов, через запятую. Тогда при коротких нажатиях клавиш происходит перебор между указанными кодами Например, android:codes="1081,1082,1083" - 
перебирает буквы й,к,л.

android:longCode
Код, выполняющийся по удержанию клавиши Содержит код символа для ввода в кодировке UNICODE или один из управляющих кодов (см. раздел Коды клавиш)

android:comboKeyCodes
применяется для организации на одной клавише комбинаций двух клавиш (ctrl-c, alb-b, shift-a и т.д)
по короткому нажатию.
Если у клавиши есть этот тег, то имитируется одновременное нажатие двух клавиш - в систему отправляется код прописанный в теге comboKeyCodes и вместе с ним код прописанный в теге codes.

Замечание!
Если тег codes содержит несколько кодов, то и этот тег должен иметь их столько же или меньше, но не менее одного.

Если вместо кода в данном теге на определённой позиции указать 0, то данная позиция считается не комбинируемой клавишей и тогда в систему отправляется только исходный код.

Например:
  <Key android:keyLabel="a,sAll" android:codes="97,-5113"  android:comboKeyCodes="0,-5029"/>
  - одно нажатие - введётся буква "а", а второе - выделит весь текст (комбинация ctrl-a).
  Код -5113, это кейкод клавиши ctrl, а -5029 - кейкод клавиши A.
О кейкодах написано ниже.


android:longComboKeyCode
применение то же, что и у тега comboKeyCodes, но для длинного нажатия. Можно указать только один код. Пример выше будет выглядеть так:
  <Key android:keyLabel="sAll\na," android:longCode="-5113"  android:longComboKeyCode="-5029"/>
- по короткому нажатию введётся буква "а", а по длинному - выделится всё.

  
Обработка кейкодов символов
Если в теге codes (longCode) указать значение -5029, то в систему будет послан символ "a" (код 29), если -5131, то код клавиши F1(131) и т.д.
Доступные в системе кейкоды коды:
https://developer.android.com/reference/android/view/KeyEvent.html?hl=ru


Данные теги поддерживают обработку кейкодов клавиш (KeyEvent.KEYCODE_* кто в курсе). Если в теге codes (или longCode) указать значение -5029, то в систему будет послан символ "a" (кейкод символа 'a'), если -5131, то код клавиши F1(кейкод 131) и т.д.

android:keyIcon
Иконка клавиши. Подробно в разделе Иконки клавиш

android:keyWidth="32%p" 
Ширина клавиши в процентах от ширины экрана. Может быть дробным значением, например "12.5%p". Если общая ширина клавиш 
в пределах тэга Row больше 100% - клавиши вылезут за пределы экрана.

android:keyHeightRow="20%p"
Высота отдельной клавиши. 
Считается от высоты текущего ряда. 
Если не задана, то берётся высота для ряда

android:keyHeight="20%p"
ТЭГ УСТАРЕЛ!
Используйте keyHeightRow.
Высота отдельной клавиши. 
Считается от высоты дисплея. 
Если не задана, то берётся высота для ряда

android:horizontalGap="10%p"
Отступ клавиши от левого края экрана или от предыдущей клавиши Если не задан - оступ нулевой

android:isSticky
Если значение "true" - клавиша имеет 2 положения, нажата и отпущена. В нажатом положении на клавише появляется зеленый кружок Нужно для клавиш Shift, Select, Ctrl, Alt и Hotkey, для остальных не имеет смысла.

android:isRepeatable
Если значение "true" - при удержании клавиши ввод повторяется. Используется для клавиш пробел, backspace и курсорных 
стрелок.

android:help
Задает текст помощи. Имеет смысл в паре с командой (-514). Например:
<Key android:codes="-514" android:keyLabel="Help" android:help="this is text" />
выведет на кнопке слово "Help" и при нажатии на нее запустит экран в который выведет текст "this is text"
Перевод на след. строку - \n

openTextFile и longOpenTextFile (длинное нажатие)
Открывают указанный текстовый файл, во встроенном текстовом редакторе. 
Теги полезны, когда требуется открыть большой текст справки, который при размещении его, например, в теге android:help, сильно замедляет раскладку.
Для предотвращения этого, рекомендуется помещать такую большую справку в файл, а в раскладке просто указывать его имя в этих тегах.
Файл должен находиться в папке keyboards. Или в подпапках указанной папки. Имя файла в таком случае указывается вместе с подпапкой: 
openTextFile="myFolder/readmi.txt"

Если вы распространяете раскладку, не забывайте прикладывать к ней файлы, указанные в этих тегах.

Также, в файлах открытых через эти теги, можно создать содержание - для этого перед названием заголовка добавьте "$I: " - именно так, с пробелом, потому и в кавычках. И не "L", а "I" (I = Item).
То есть - так правильно:
$I: Предисловие (это пример)

а вот так нет:
$I:Предисловие


android:calcReg
Имеет смысл только в калькуляторах
Устанавливает соответствие клавиши номеру одного из регистров памяти в калькуляторе
Например:
<Key android:calcReg="14" android:keyLabel="0" android:codes="-540" />
Присвоит клавише -540 калькулятора регистр памяти 14.
Количество регистров ограничено количеством клавиш калькулятора.
Всего в калькуляторе 99 регистров памяти.
Так как, программа не позволяет отобразить визуально регистры (вернее я не придумал как), то рекомендую описывать соответствие назначенных клавишам регистров памяти при помощи тега help

android:calcMenu
Имеет смысл только в калькуляторах при включении индикатора (клавиша Сх (код -556))
Если есть, показывает указанные пункты меню, перечисленные через пробел, в порядке, в каком перечислены, если нет - выдаёт только историю (аналог значения history)
Формат: android:calcMenu="history list" - покажет в меню калькулятора историю вычислений и кнопку листинга программы калькулятора.
Значения:
history - история вычислений
list - запись в текст листинга программы
save - запись программы калькулятора
load - загрузить программу калькулятора
(в будущем варианты значений могут быть расширены)

android:popupCharacters
Строка, содержащая набор символов. Если задана - по удержанию клавиши выводится маленькая клавиатура, позволяющая ввести каждый из указанных символов. Оптимально - 18 символов (на 4.5" экране).
Тег keyLabel обязательно должен присутствовать и иметь значение по долгому нажатию!
Поддерживает 2 формата:
если строка имеет вид "abcd", то выведется маленькая клавиатура содержащая 4 кнопки "a", "b", "c", "d", а если строка имеет вид "v2 abcd", то выведется маленькая клавиатура второй версии, содержащая одну кнопку "abcd".

android:shortPopupCharacters
Строка, содержащая набор символов. Если задана - по короткому нажатию клавиши выводится маленькая клавиатура, позволяющая ввести указанные слова
Всегда вызывается только маленькая клавиатура версии 2 (читай выше), однако префикс "v2 " указывать не нужно.

Кроме того, для маленькой клавиатуры v2 есть возможность задать любой исполняемый код (или символ - тогда вместо символа указывайте его код) из имеющихся в клавиатуре.
Для этого создаваемая кнопка задаётся в специальном формате (БЕЗ ПРОБЕЛОВ!), например - 
$[-502,Шаблоны] - при нажатии на неё откроются шаблоны; 
$[32,Пробел] - при нажатии на неё введётся пробел.

А также, поддерживается специальное сочетание - $l# - вставляет в выводимый список разделяющую линию.

android:noColor
Если "true" - изображение на клавише не окрашивается в цвет текста и используется как есть. Имеет смысл только для 
клавиш с аттрибутом keyIcon

android:specKey 
Имеет смысл в скинах, где функциональные клавиши отличаются оформлением от буквенных. 
"true" - клавиша рисуется с оформлением функциональных клавиш (как например клавиша Shift), "false" - со стандартным оформлением 
Если при текущем скине все клавиши рисуются с одинаковым фоном - этот атрибут игнорируется. Если не задан - программа сама выбирает нужный фон.

android:goQwerty 
Имеет смысл только на дополнительных клавиатурах. "true" - после нажатия клавиши происходит возврат на основную qwerty-клавиатуру. "false" - после нажатия клавиши остаемся на дополнительной клавиатуре.

android:smallLabel 
Позволяет вывести основной текст на клавиатуре тем же шрифтом, которым выводятся дополнительные символы. Костыль для 
длинных текстов.

android:keyOutputText 
при нажатии на кнопку выводит текст любой длины ,например keyOutputText="Пусть всегда будет солнце",тег работает,так что ничего трогать не надо

android:longKeyOutputText 
то же самое,только на долгое нажатие, тоже работает

android:keyboard (keyboard именно с маленькой буквы) или
android:longKeyboard="ru_myLayout.xml"

Запускает xml раскладку клавиатуры с названием "ru_myLayout.xml" по короткому (keyboard) или длинному (longKeyboard) нажатию.
Значение атрибута - путь к файлу раскладки от корня папки jbak2Keyboard или полный путь (если начинается с / ).
Если вам не нужно чтобы эта раскладка показывалась в списке доступных языков, то назовите её без символа подчёркивания в названии. Или используйте префикс hide_ в начале названия, то есть, вот так: android:longKeyboard="hide_myLayout.xml"

Также доступны специальные значения:
$название - открытие встроенной клавиатуры по имени (см.примеры)
$$тип - тип может быть ru, en, symbol, num и т.д. Открывает настроенную пользователем клавиатуру указанного типа, для текущей ориентации экрана. Открытая таким образом клавиатура - временная.
Исключение составляет тип hide, так как у него нет прямой направленности в программе.

Нажатие кнопки c кодом -2 - возвращает
к основной клавиатуре (даже если одна клавиатура была открыта из другой).

Например:
android:keyboard="$$calc" откроет сохраненную в настройках раскладку калькулятора
android:longKeyboard="$$ru"  откроет сохраненную в настройках раскладку русского языка.
android:keyboard="$ru_qwerty" откроет встроенную русскую раскладку "клавиатура qwerty" из папки assets приложения
android:keyboard="$ru_example.xml" откроет русскую раскладку ru_example.xml лежащую в папке jbak2keyboard/keyboards

Для кастомных клавиатур доступны атрибуты template и longTemplate , позволяющие использовать механизм шаблонов по короткому и долгому нажатию

$I: Тэг <Replace from="11" to=":)"/> 
Указывается под всеми рядами, но перед тэгом </Keyboard>
 Если пользователь ввел текст, записанный в from - его принудительно меняет на текст, 
 записанный в to. Работает с учетом регистра. Таких тегов может быть неограниченое количество 

Тэг <includeReplace file="repl.txt"/>
Тег добавляет в раскладку список замен из файла, дополнительно к имеющимся в этой раскладке.
Таких тегов может быть неограниченное число.
Имеет только один атрибут "file", указывающий на имя внешнего файла замен.
По умолчанию, файлы замен должны лежать в папке Jbak2Keyboard\keyboards. Если название файла начинается с /, то указывается полный путь.
Как и тэг Replace, должен располагаться после всех рядов, но до тега </Keyboard>.
Имейте в виду - чем больше вы добавите таким образом замен, тем медленнее будет загружаться раскладка.

Внешний файл замен, должен состоять только из тегов Replace. 
То есть:
--- repl.txt ---
<Replace from="bb" to="abc"/>
<Replace from="oc" to="?"/>
<Replace from="ss" to="§"/>
<Replace from="pp" to="zzz"/>

Обратите внимание, теги считываются в том порядке, как они расположены в раскладке.
Если в тегах встретятся замены с одинаковыми атрибутами from="", то использоваться будет тег, который встретился позже.
>
$I: КОДЫ КЛАВИШ

$I: Коды

Для буквенных клавиш используются коды символов в кодировке utf-8. Коды могут быть записаны как в десятичной, так и в шестнадцатеричной системе (в этом случае число начинается c 0x или #) Например, русская буква 'а' может быть записана как 1072 или 0x430.

Код пустой операции:

0 - по ней ничего не делается. Иногда бывает необходима в ваших конструкциях, чтобы желаемое заработало как требуется.

$I: Клавиши управления курсором:

19 - вверх
20 - вниз
21 - влево
22 - вправо
-303 - переход в начало всего текста
-304 - переход в конец всего текста
-305 - переход в начало абзаца
-306 - переход в конец абзаца
-326 - страница вверх
-327 - страница вниз
-328 - Home (в начало строки)
-329 - End (в конец строки)
-310 - включение/отключение режима выделения
-307 - включение/отключение режима горячих клавиш (клавиша Hotkey)
-330 - запись макроса1
-331 - выполнение макроса1
-332 - очистка макроса1
-333 - запись макроса2
-334 - выполнение макроса2
-335 - очистка макроса2
Внимание! Макросы не будут работать если они вызываются из раскладок с типом hide!

$I: Текстовые команды:

-320 - Copy (копирует выбранный текст)
-321 - Paste (вставляет текст из буфера обмена)
-322 - Cut (копирует выбранный текст в буфер обмена и удаляет его)
-323 - Select All (выделяет весь текст в поле ввода)
-324 - копировать всё
-325 - информационная команда - показывает размер выделенного текста
-336 - отменить последнее действие (Undo)
-337 - повторить последнее действие (Redo)
-338 - функции выделения
-339 - выделить абзац
-340 - выделить строку
-341 - выделить предложение
-342 - выделить слово

$I: Qwerty - клавиатура:

32 - клавиша пробел 
10 - клавиша Enter
9 - клавиша Tab
-1 - клавиша Shift
-308 - клавиша alt (левый)
-311 - клавиша alt (правый)
-309 - клавиша ctrl (левая)
-5 - клавиша Backspace (удаляет символ ПЕРЕД курсором)
-601 - клавиша Delete (удаляет символ ПОСЛЕ курсора (если есть))
-602 - удаляет СЛОВО ПЕРЕД курсором
-343 - удаляет СЛОВО ПОСЛЕ курсора
-2 - код клавиши для вызова символьной клавиатуры (123) или возврата на qwerty (ABC)
-3 - код клавиши, закрывающей клавиатуру
-20 → переключает язык по кругу, если языков больше 3 - показывает меню выбора языка
-21 → показывает меню выбора, даже если два языка
-22 → переключает между последними двумя языками
-23 → переключает языки по кругу, без ограничения числа языков 
-24 → переключает языки по кругу, но в обратном порядке, без ограничения числа языков 

$I: Обычно используются только в жестах:
-604 - ввод символа на символьной клавише в верхнем регистре
-605 - ввод символа на символьной клавише в нижнем регистре
-606 - ввод текста (или символа) указанного по длинному нажатию клавиши

$I: Внутренние коды:

-498 - сохранение программы калькулятора
-499 - загрузка программы калькулятора
-500 - запуск главного меню (аналог смотри описание "opt" в теге keyLabel)
-501 - голосовой ввод
-502 - запуск шаблонов
-503 - запуск настроек программы
-504 - запуск буфера обмена
-507 - экран запуска приложений
-508 - запуск выбора текущей раскладки языка
-511 - запуск настройки показа пунктов главного меню
-512 - запуск настройки выбора скина
-513 - выбор метода ввода
-514 - запуск окна помощи. Текст берется из тега android:help этой клавиши
-515 - запуск полноэкранного выбора раскладки языка
-516 - история вычислений калькулятора
-517 - запуск калькулятора (аналог - -618)
-518 - запись текста программы калькулятора в текст (листинг программы)
-519 - скрывает/показывает окно автодополнения
-607 - выбор полноэкранного режима
-608 - перевести выделенное
-609 - перевести скопированное
-610 - запуск раскладки смайликов (аналог - -620)
-611 - запуск раскладки редактирования (аналог - -619)
-612 - запуск числовой раскладки (аналог - -621)
-613 - поделиться выделенным
-614 - поиск выделенного в браузере
-615 - поиск скопированного в браузере
-616 - запуск редактора словаря пользователя
-617 - показывает скопированное число в различных системах счисления
-618 - вызов выбранной раскладки калькулятора (аналог команды -517, но обрабатывается по другому)
-619 - вызов выбранной раскладки редактирования (аналог команды -611, но обрабатывается по другому)
-620 - вызов выбранной смайловой раскладки (аналог команды -610, но обрабатывается по другому)
-621 - вызов выбранной числовой раскладки (аналог команды -612, но обрабатывается по другому)
-622 - временное отключение словаря
-623 - быстрая смена раскладки для языка (через меню)
-624 - поделиться скопированным
-625 - ввод спецсимволов в поле ввода
-626 - быстрая смена скина
-627 - запуск выбора языков и раскладок
-628 - показывает список скрытых раскладок пользователя
-629 - показывает список раскладок с дополнительными символами
-630 - выводит окно поверх клавиатуры, с перечислением символов из встроенного в клавиатуру шрифта. Используется для облегчения создания своей раскладки.
-632 - выгружает программу из памяти
-633 - показать вьювер шрифтов
-634 - показать диалог истории просмотра шрифтов на клавиатуре
-635 - диалог показа кодов символов перед курсором
-636 - запуск настроек прокручивающихся раскладок
-100001 - выводит маленькую клавиатуру для Дополнительных символов.

$I: Калькулятор:

Весь калькулятор реализован через коды.
Что нужно от клавиш калькулятора? Требуется чтобы при нажатии клавиши не производился вывод в поле ввода.

Общее:
-540..-549 - клавиши 0..9
-550 - никакой операции (подавляет вывод на экран)
-552 - клавиша умножить    
-553 - клавиша делить    
-554 - клавиша плюс    
-555 - клавиша минус    
-556 - клавиша очистки содержимого регистра х (Cx). Она же включает индикатор калькулятора
-557 - клавиша копирования содержимого регистра x в y, y в z (команда "В стрелка вверх" в МК61)
-558 - клавиша обмена содержимого регистров x и y
-536 - клавиша вращает содержимое регистров по кругу: t-z-y-x-(а х помещается в t)
-559 - клавиша минуса по модулю ("/-/")
-560 - клавиша "точка" (".") - означает что после её нажатия будет вводиться дробная часть
-561 - клавиша окончания работы с калькулятором. Обязательна для использования в калькуляторе. Аналог клавиши (-2). Выключает индикатор и восстанавливает данные окна автодополнения.
-562 - клавиша включения индикатора калькулятора. Ничего не делает. Можно использовать в других различных целях
-565 - клавиша "шаг вперед" - прибавляет к концу значения индикатора 0
-566 - клавиша "шаг назад" - убирает последнюю цифру из значения индикатора

$I: Функции калькулятора:

-563 - клавиша x^2 (х в квадрате)
-564 - клавиша sqrt(x) (корень квадратный из x)
-567 - клавиша %
-585 - число Пи
-586 - синус
-587 - косинус
-588 - тангенс
-589 - арксинус
-590 - арккосинус
-591 - арктангенс
-592 - 1/x
-593 - x^y (x в стенени y)
-535 - ВП (x в стенени 10)
-594 - LOG
-595 - случайное число (от 0 до 1)
-596 - возвращает целую часть числа
-597 - LOG10
-539 - e
-538 - е^х
-537 - факториал
-600 - ⌈x⌉ - округляет в большую сторону до указанного числа знаков дробной части. Например, на индикаторе 5.888889, тогда ⌈x⌉+цифра 2 калькулятора вернет 5.89.
-579 - ⌊x⌋ - округляет в меньшую сторону до указанного числа знаков дробной части. Например, на индикаторе 5.888889, тогда ⌊x⌋+цифра 2 калькулятора вернет 5.88.

Память:
отдельная ячейка памяти. Не зависит от клавиши
-568 - клавиша "M" - запоминает значение индикатора в памяти
-569 - клавиша "MR" - читает из памяти запомненное ранее значение и выдаёт его на индикатор калькулятора
-570 - клавиша "MC" - очищает значение в ячейке памяти
Для регистров 00-99 используйте тег calcReg

$I: Программируемый калькулятор:
-571 - нажатие клавиши после этой, если на той клавише назначен регистр памяти, то текущее значение индикатора помещается в тот регистр (аналог ПХ на мк61)
-572 - нажатие клавиши после этой, если на той клавише назначен регистр памяти, то происходит извлечение из значения регистра второй клавиши и вставка в индикатор калькулятора (аналог ИПХ на мк61)
-573 - устанавливает позицию в программе на первый шаг, или возврат из подпрограммы (клавиша в/о в мк61)
-574 - команда старт/стоп программы (аналог клавиши с/п в мк61)
-575 - команда перехода в режим вычислений
-576 - команда перехода в режим программирования
-577 - очистка памяти программ калькулятора и установка текущего шага на нулевую позицию
-578 - безусловный переход (аналог БП в МК61)
-520 - подпрограмма (аналог ПП в МК61)
-521 - команда x>=0
-522 - команда x<0
-523 - команда x=0
-524 - команда x!=0 (!= = неравно)
-525 - команда x>=y
-526 - команда x<y
-527 - команда x=y
-528 - команда x!=y (!= = неравно)

$I: Иконки клавиш

В качестве иконки может быть задана одна из встроенных иконок:
@drawable/sym_keyboard_forward_del - Иконка клавиши delete
@drawable/sym_keyboard_delete - Иконка клавиши Backspace
@drawable/sym_keyboard_done - Иконка клавиши Cancel (клавиша, которая закрывает клавиатуру)
@drawable/sym_keyboard_return - Иконка клавиши Enter
@drawable/sym_keyboard_shift - Иконка клавиши Shift
@drawable/sym_keyboard_space - Иконка клавиши Пробел
@drawable/

Например, android:keyIcon="@drawable/sym_keyboard_space" отобразит на клавише иконку пробела

Кроме того, можно задать путь к иконке, которая расположена в папке /mnt/sdcard/jbak2Keyboard/keyboards .
Например, android:keyIcon="myIcons/icon1.png" отобразит на клавише иконку 
/mnt/sdcard/jbak2Keyboard/keyboards/myIcons/icon1.png
Иконки должны быть белыми на прозрачном фоне. При отрисовке они окрашиваются в цвет текста текущего скина пользователя.
Для использования цветных иконок необходимо задать атрибут android:noColor="true" - тогда иконка не будет 
окрашиваться в цвет текста.


$I: Примeр стандартной английской раскладки "псевдо Т9 в1.09":
---

<?xml version="1.0" encoding="utf-8"?>
<Keyboard xmlns:android="http://schemas.android.com/apk/res/android" android:keyWidth="10.0%p" >
 <Row>
  <Key android:keyLabel="!\nq1" android:codes="113,49" android:keyWidth="10.0%p" />
  <Key android:keyLabel="@\nw2" android:codes="119,50" android:keyWidth="10.0%p" />
  <Key android:keyLabel="№\ne3" android:codes="101,51" android:keyWidth="10.0%p" />
  <Key android:keyLabel="#\nr4" android:codes="114,52" android:keyWidth="10.0%p" />
  <Key android:keyLabel="€\nt5" android:codes="116,53" android:keyWidth="10.0%p" />
  <Key android:keyLabel="%\ny6" android:codes="121,54" android:keyWidth="10.0%p" />
  <Key android:keyLabel="&amp;\nu7" android:codes="117,55" android:keyWidth="10.0%p" />
  <Key android:keyLabel=".com\ni8" android:codes="105,56" android:keyWidth="10.0%p" />
  <Key android:keyLabel="^\no9" android:codes="111,57" android:keyWidth="10.0%p" />
  <Key android:keyLabel="=\np0" android:codes="112,48" android:keyWidth="10.0%p" />
 </Row>
 <Row>
  <Key android:keyLabel=":)\na$" android:codes="97,36" android:specKey="false" android:keyWidth="10.0%p" />
  <Key android:keyLabel=":(\ns" android:keyWidth="10.0%p" />
  <Key android:keyLabel="+\nd" android:keyWidth="10.0%p" />
  <Key android:keyLabel="*\nf" android:keyWidth="10.0%p" />
  <Key android:keyLabel="—\ng-" android:codes="103,45" android:keyWidth="9.65%p" />
  <Key android:keyLabel="&quot;\nh_" android:codes="104,95" android:specKey="false" android:keyWidth="9.65%p" />
  <Key android:keyLabel="\'\nj" android:codes="106" android:keyWidth="9.65%p" />
  <Key android:keyLabel="[S1]\nk" android:popupCharacters="([{/«~" android:codes="107" android:keyWidth="10.0%p" />
  <Key android:keyLabel="[S2]\nl" android:popupCharacters=")]}\»|" android:keyWidth="10.0%p" />
  <Key android:keyLabel="del" android:codes="-601" android:specKey="true" android:isRepeatable="true" android:keyWidth="12.5%p" />
 </Row>
 <Row>
  <Key android:longCode="-328" android:keyLabel="Hom\nz" android:specKey="true" android:keyWidth="10.0%p" />
  <Key android:keyLabel="Calc\nx" android:longCode="-517" android:keyWidth="10.0%p" />
  <Key android:keyLabel="#\nc" android:keyWidth="10.0%p" />
  <Key android:longCode="-329" android:keyLabel="End\nv" android:specKey="true" android:keyWidth="10.0%p" />
  <Key android:keyLabel="&lt;\nb" android:keyWidth="9.65%p" />
  <Key android:keyLabel="&gt;\nn" android:keyWidth="9.65%p" />
  <Key android:keyLabel="©\nm" android:keyWidth="9.65%p" />
  <Key android:keyLabel="?\n.ru" android:specKey="false" android:keyWidth="10.0%p" />
  <Key android:keyLabel="✉\nUrl" android:keyboard="$hide_url_suff_MWcorp_v100" android:longKeyboard="$hide_mail_MWcorp_v100" />
  <Key android:codes="-5" android:keyIcon="@drawable/sym_keyboard_delete" android:isRepeatable="true" android:keyWidth="12.5%p" />
 </Row>
 <Row>
  <Key android:codes="-1" android:keyIcon="@drawable/sym_keyboard_shift" android:isSticky="true" android:keyWidth="12.5%p" />
  <Key android:keyLabel="Hot" android:isSticky="true" android:codes="-307" android:specKey="true" android:smallLabel="true" />
  <Key android:keyLabel="sAll\nsel" android:isSticky="true" android:codes="-310" android:longCode="-323" android:specKey="true" android:smallLabel="true" android:keyWidth="12.5%p" />
  <Key android:codes="32" android:keyIcon="@drawable/sym_keyboard_space" android:keyWidth="20.0%p" android:isRepeatable="true" />
  <Key android:keyLabel=",\n." />
  <Key android:keyLabel=";\n:" />
  <Key android:keyLabel="↑" android:codes="19" android:isRepeatable="true" android:specKey="true" android:keyWidth="12.5%p" />
  <Key android:codes="10" android:keyIcon="@drawable/sym_keyboard_return" android:keyWidth="12.5%p" />
 </Row>
 <Row>
  <Key android:codes="-2" android:keyLabel="opt\n123" android:keyWidth="12.5%p" />
  <Key android:codes="-20" android:keyLabel="d_vr\nEn" android:keyWidth="12.5%p" />
  <Key android:codes="-502" android:longCode="-504" android:keyLabel="CBuf\ntpl" android:smallLabel="true" android:specKey="true" android:keyWidth="12.5%p" />
  <Key android:codes="-320" android:keyLabel="cop" android:smallLabel="true" android:specKey="true" android:keyWidth="12.5%p" />
  <Key android:codes="-321" android:keyLabel="pas" android:smallLabel="true" android:specKey="true" android:keyWidth="12.5%p" />
  <Key android:keyLabel="←" android:codes="21" android:isRepeatable="true" android:specKey="true" android:keyWidth="12.5%p" />
  <Key android:keyLabel="↓" android:codes="20" android:isRepeatable="true" android:specKey="true" android:keyWidth="12.5%p" />
  <Key android:keyLabel="→" android:codes="22" android:isRepeatable="true" android:specKey="true" android:keyWidth="12.5%p" />
 </Row>
</Keyboard>

Категория: Статьи по jbak2 keyboard | Добавил: wolf3d (25.06.2023)
Просмотров: 172 | Рейтинг: 5.0/1
Всего комментариев: 0
avatar