Как сделать свою клавиатуру для андроид

Как сделать свою клавиатуру для андроид

Сегодня мы научимся делать не что то там, а самую настоящую клавиатуру со всем стандартным набором возможностей, которую при желании вы сможете даже использовать на своем Android устройстве вместо стандартной (ну представьте себе — печатать смс-ки на собственной клавиатуре, что может быть лучше:)). Если вы думаете, что урок будет очень сложным — то вы правы вы ошибаетесь. Оказывается, что в стандартном функционале Android SDK Manager есть абсолютно все необходимое для создания полноценной клавиатуры без лишних страданий. Нам не нужно будет ни вырисовывать внешний вид клавиш, ни настраивать распознавание нажатий клавиш, ни мучиться с привязыванием нашей будущей клавиатуры к полям ввода. Все это уже по умолчанию есть в SDK Manager, нам только осталось научиться этим воспользоваться!

Начнем. Создаем новый проект, я назвал его Keyboard (как мы неоднократно договаривались — все названия на ваше усмотрение, только лишь бы вы сами в них не путались). На том шаге, когда нам предлагается создать какую либо Activity, выбираем Add No Activity и жмем финиш.

Перво наперво, что нам нужно сделать это получить для нашего приложения разрешение ему быть клавиатурой:). Мы хотим создать свое устройство ввода, что называется Input Method Editor (IME), оно определяется в файле манифеста как Service, использующий разрешение BIND_INPUT_METHOD и соответствует действию android.view.InputMethod. Идем в файл манифеста AndroidManifest.xml и добавляем в тег следующее:

Видим красные подчеркивания (нам не привыкать), не волнуемся.

Тег Service содержит тег , который ссылается на несуществующий пока файл method.xml. без этого файла ОС Android не признает нашу клавиатуру как корректный метол ввода, который можно использовать. Этот файл должен содержать подробности о методе ввода и его подтипах. Для нашей клавиатуры определим всего один подтип для en_US локализации (не будем пока экспериментировать с русским, нам главное понять принцип). Создаем в приложении res/layout папку и создаем в ней нужный нам файл method.xml. Вносим в файл res/layout/mehod.xml следующее:

Теперь давайте отредактируем файл строковых ресурсов res/values/strings.xml. Нам нужно добавить сюда строки для:

— название для IME;

— название для подтипа IME;

Имя приложения у нас уже есть, остается только добавить две нужные строчки. Отредактированный файл strings.xml выглядит так:

Теперь нужно определить внешний вид клавиатуры. Файл layout для нашей клавиатуры будет содержать только один объект — KeyboardView. Для того, чтобы наша клавиатура появлялась в низу экрана, настроим атрибут layout_alignParentBottom со значением true. Создаем файл res/layout/keyboard.xml следующее:

Строка keyPreviewLayout отвечает за то, как будет выглядеть нажатая клавиша на нашей клавиатуре. Как видите, за ее вид будет отвечать файл preview, который мы и создадим. Создаем файл res/layout/preview.xml и добавим в него следующее содержимое:

Теперь нужно определить клавиши клавиатуры. Подробное описание клавиш и их расположение описывается в специальном .xml файле. Каждая клавиша имеет следующие атрибуты:
keyLabel — название клавиши, которое будет отображаться на клавише;

codes — этот атрибут содержит уникальный код, который характеризует нажатую клавишу.

Каждая клавиша, будь то цифра, буква, какой — либо знач имеют свой собственный уникальный код. Например, буква А имеет значение codes — 97, соответственно keyLabel нужно придать значение «А». Одной клавише можно задать несколько значений в атрибут codes, то клавиша будет принимать определенное значение из этих троих а зависимости от того, сколько раз мы нажали на клавишу (вспомните клавиатурный набор на старых мобильных — на одной клавише «а,б,в,г» и т.д.). Например, если мы зададим кнопке коды 63,33 и 58 то при одном нажатии получим символ «?», при двух нажатиях в короткой последовательности получим «!», а при троих нажатиях — двоеточие «:».

Читайте также:  Seefax com software android html

Клавиша может иметь еще несколько атрибутов:

keyEdgeFlags — атрибут может применять значение left или right. Эти атрибуты добавляются клавишам, которые расположены в самом левом или самом правом положении, соответственно;

keyWidth — определяет ширину клавиши. Как правило задается в процентах;

isRepeatable — если этот атрибут имеет значение true, то долгое нажатие на клавишу будет повторять ее действие несколько раз (например «аааааа»), как правило эту опцию включают для клавиш удаления, пробела и т.п.

Клавиши в клавиатуре сгруппированы в колонки. Довольно практично делать по 10 клавиш в колонке и каждой клавише отдавать 10% ширины от общей ширины клавиатуры. Мы выставим высоту клавиш равную 60dp. Можно ее изменять, но не рекомендуется делать высоту меньше 48 dp. У нас будет 5 столбцов клавиш.

Переходим от теории к действию. Создаем файл res/layout/qwerty.xml. Файл должен содержать следующий код:

Некоторые клавиши могут иметь отрицательное значение атрибута codes, они эквиваленты встроенным константам в класс Keyboard. Например, значение -5 соответствует значению Keyboard.KEYCODE_DELETE.

Теперь создадим новый Java класс и назовем его IME.java. Он должен наследовать класс InputMethodService и выполнять интерфейс OnKeyboardActionListener. Этот интерфейс содержит методы, которые вызываются при нажатии на клавиши.

Класс IME должен иметь 3 типа переменных:

KeyboardView — ссылающийся на вид, определенный в layout файле;

Keyboard — применяет то, что было назначено в KeyboardView;

boolean — сообщает о включенном caps lock-е.

Если проделать все сказанное, наш файл IME.java приобретает вид:

Когда клавиатура создана, вызывается метод onCreateInputView. Все переменные тега Service можно инициализировать прямо здесь в методе. Добавьте метод onCreateInputView:

Теперь нужно настроить проигрывание звука при нажатии на клавиши. Используем для этого класс AudioManager. Используем стандартные звуки в методе PlayClick. Код блока настройки звука:

Теперь нам нужно настроить метод onKey для того, чтобы заставить нашу клавиатуру работать с полями ввода (как правило EditText) других приложений. Для этого используется метод getCurrenrInputConection. Здесь нужно настроить следующее:

commitText — для добавления одного или больше символов в поле ввода;

deleteSurroundingText — для удаления одного или более символов в поле ввода;

sendKeyEvent — отослать событие, типа KEYCODE_ENTER, во внешнее приложение (любое где мы будем использовать нашу клавиатуру).

Каждый раз когда пользователь нажимает на клавишу на клавиатуре вызывается метод onKey, передавая уникальное значение (codes рассмотрено выше) нажатой клавиши. Учитывая значение принятого кода, клавиатура выполняет определенное действие, которое соответствует коду.

Приведите свой метод onKey к такому виду:

И вот наконец то все! Мы добили наш урок и клавиатура готова к тестированию. Стоит отметить, что так, как наша клавиатура не имеет никакого Activity (Add No Activity, помните?) то ее после установки на эмулятор или устройство не отобразит среди установленных программ. Все дружно идем в настройки — настройки ввода и клавиатуры и там активируем наше творение, как используемый (или один из используемых) метод ввода. Запускаем что либо, где нужно вводить текст, и тестим!

Читайте также:  Gps для китайского андроида

Источник

Как написать свою клавиатуру для Android

Здравствуйте. В данной статье я постараюсь рассказать и показать основные моменты написания собственной клавиатуры для Android’а. Статья предназначена для разработчиков, которые с этим не сталкивались, но имеют опыт знакомства с Android’ом.

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

Для начала необходимо создать пустой Android проект без Activity. После этого приступим к подготовке .xml файлов, которые будут описывать Android’у нашу клавиатуру.

Базовый layout-файл, keyboard.xml

Содержит в себе View класс Android’а под названием KeyboardView и описывает внешний вид клавиатуры.

  • android: keyPreviewHeight — задает высоту элемента подсказки, на котором отображается текущая нажатая клавиша.
  • android:keyPreviewLayout — указываем layout-файл, который описывает внешний вид preview’шки.

Важный момент, атрибут background является обязательным, если его не указать, то при каждом нажатии клавиши ваша клавиатура будет падать.

Итак, мы подготовили 2 .xml файла, которые описывают внешний вид, теперь настал черед описать саму раскладку клавиатуры. Назовем этот файл keys_definition_ru.xml и находится он будет в xml ресурсах проекта. Здесь будет представлен лишь его кусок, так как файл достаточно большой.

Все атрибуты описывать не будем, лишь «не очевидные».

  • android:horizontalGap — горизонтальный отступ между клавишами
  • android: verticalGap — вертикальный отступ
  • android:codes — код нужного символа в html utf-8 (и не только utf-8, подробнее в оф. документации)
  • android:keyEdgeFlags — атрибут может применять значение left или right. Эти атрибуты добавляются клавишам, которые расположены в самом левом крае или самом правом крае клавиатуры
  • android:isRepeatable — повторять действие клавиши при долгом нажатии (обычно используется на пробеле или backspace)

Заключительный файл — описание локализаций (подтипов инпута):

InputMethodService — сервис клавиатуры

Теперь, после того как мы создали все необходимые xml файлы, приступаем к описанию сервиса, который будет слушать события InputMethod.

Для этого создадим сервис, наследуясь от InputMethodService и сразу реализуем интерфейс KeyboardView.OnKeyboardActionListener. В итоге у вас получиться набор методов, которые вы можете переопределить и наполнить необходимой функциональностью, которые позволяют широко кастомизировать вашу клавиатуру. Но здесь я приведу лишь примеры базовых моментов.

Одним из методов жизненного цикла InputMethodService является onCreateInputView внутри которого мы создаем View клавиатуры и привязываем к ней необходимые листенеры.

Событие onKey срабатывает между onPress и onRelease, на вход им подается код нажатой клавиши.

Итак, все готово… почти, осталось добавить наш сервис в манифест.

Поздравляю, вы написали свою первую клавиатуру!

Источник

Как написать свою клавиатуру для Android

Здравствуйте. В данной статье я постараюсь рассказать и показать основные моменты написания собственной клавиатуры для Android’а. Статья предназначена для разработчиков, которые с этим не сталкивались, но имеют опыт знакомства с Android’ом.

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

Для начала необходимо создать пустой Android проект без Activity. После этого приступим к подготовке .xml файлов, которые будут описывать Android’у нашу клавиатуру.

Базовый layout-файл, keyboard.xml

Содержит в себе View класс Android’а под названием KeyboardView и описывает внешний вид клавиатуры.

  • android: keyPreviewHeight — задает высоту элемента подсказки, на котором отображается текущая нажатая клавиша.
  • android:keyPreviewLayout — указываем layout-файл, который описывает внешний вид preview’шки.
Читайте также:  Android снимок экрана как сделать

Код preview:

Важный момент, атрибут background является обязательным, если его не указать, то при каждом нажатии клавиши ваша клавиатура будет падать.

Итак, мы подготовили 2 .xml файла, которые описывают внешний вид, теперь настал черед описать саму раскладку клавиатуры. Назовем этот файл keys_definition_ru.xml и находится он будет в xml ресурсах проекта. Здесь будет представлен лишь его кусок, так как файл достаточно большой.

Все атрибуты описывать не будем, лишь «не очевидные».

  • android:horizontalGap — горизонтальный отступ между клавишами
  • android: verticalGap — вертикальный отступ
  • android:codes — код нужного символа в html utf-8 (и не только utf-8, подробнее в оф. документации)
  • android:keyEdgeFlags — атрибут может применять значение left или right. Эти атрибуты добавляются клавишам, которые расположены в самом левом крае или самом правом крае клавиатуры
  • android:isRepeatable — повторять действие клавиши при долгом нажатии (обычно используется на пробеле или backspace)

Заключительный файл — описание локализаций (подтипов инпута):

InputMethodService — сервис клавиатуры

Теперь, после того как мы создали все необходимые xml файлы, приступаем к описанию сервиса, который будет слушать события InputMethod.

Для этого создадим сервис, наследуясь от InputMethodService и сразу реализуем интерфейс KeyboardView.OnKeyboardActionListener. В итоге у вас получиться набор методов, которые вы можете переопределить и наполнить необходимой функциональностью, которые позволяют широко кастомизировать вашу клавиатуру. Но здесь я приведу лишь примеры базовых моментов.

Одним из методов жизненного цикла InputMethodService является onCreateInputView внутри которого мы создаем View клавиатуры и привязываем к ней необходимые листенеры.

Событие onKey срабатывает между onPress и onRelease, на вход им подается код нажатой клавиши.

Итак, все готово… почти, осталось добавить наш сервис в манифест.

Поздравляю, вы написали свою первую клавиатуру!

Источник

Клавиатура со стрелками для Android

Чего мне не хватало с самого начала пользования смартфонами на Андроид, так это хорошей клавиатуры со стрелками. И вот я сделал её своими руками.

Конечно, я не писал программу (увы, я этого не умею). Я просто создал три клавиатурных раскладки для замечательной программы Jbak Keyboard Юрия Бакунина (http://jbak.ru/jbakkeyboard). Эта программа позволяет создавать любые раскладки клавиатур с любыми клавишами любых размеров.

Кроме стрелок на клавиатуре есть две удобные клавиши для работы с буфером. Клавиша слева от Enter включает режим выделения — можно просто выделять нужный кусок текста стрелочками. Долгое нажатие этой клавиши выделяет весь текст. Клавиша справа от «Ю» копирует выделенный фрагмент в буфер обмена, а при её долгом нажатии происходит вставка текста из буфера.

Всё остальное — как в оригинальной раскладке Jbak Keyboard — большие клавиши букв, редко используемые буквы собраны в отдельном ряду. У каждой клавиши есть вторая функция при долгом нажатии.

Третья раскладка, которую я сделал, — символьная. В ней просто заменён нижний ряд клавиш, чтобы было так же, как в алфавитных клавиатурах.

Алфавитной клавиатурой в портретном режиме пользоваться менее удобно, но вполне возможно.

Три дополнительные раскладки остались без изменений:
Дополнительная символьная клавиатура (она вызывается по Shift из основной символьной клавиатуры).

Клавиатура смайликов (вызывается по долгому нажатию Enter).

Клавиатура редактирования (вызывается по долгому нажатию Shift).

Jbak Keyboard имеет редактируемые шаблоны текста (вызываются по долгому нажатию стрелки влево) и мультибуфер обмена (долгое нажатие стрелки вправо).

Источник

Оцените статью