Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. Android

Создание пользовательской клавиатуры на Android

Difficulty:BeginnerLength:LongLanguages:

Russian (Pусский) translation by Alex Grigorovich (you can also view the original English article)

Final product image
What You'll Be Creating

Большинство устройств Android не имеют  клавиатуры. Вместо этого они полагаются на виртуальную или экранную клавиатуру для ввода текста. Если вы используете персонализацию Android, то знание о создании пользовательской, приятной клавиатуры может вывести ваше хобби на совершенно новый уровень.

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

В этом уроке вы узнаете, как создать полноценную функциональную клавиатуру, которая может служить для вас на вашем устройстве Android по умолчанию.

1. Предпосылки

Вам понадобится комплект Eclipse ADT Bundle. Вы можете загрузить его с веб-сайта разработчика Android.

2. Создать новый проект

Запустите программу Eclipse и создайте новое приложение для Android. Назовите это приложение SimpleKeyboard. Убедитесь, что вы выбрали уникальное имя пакета. Установите минимально необходимый SDK на значение Android 2.2 и установите целевой SDK на значение Android 4.4

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

3. Отредактируйте манифест

Экранная клавиатура рассматривается как Input Method Editor (IME) для операционной системы Android. IME объявляется как Service в AndroidManifest.xml, который использует разрешение BIND_INPUT_METHOD и отвечает за android.view.InputMethod.

Добавьте следующие строки в тег application файла манифеста:

4. Создайте метод.

Тег service в файле манифеста содержит meta-data, который ссылается на файл XML с именем method.xml. Без этого файла операционная система Android не признает наш Service в качестве действительной IME-службы. Файл содержит сведения о методе ввода и его подтипах. Для перевода нашей клавиатуры на другой язык мы выбираем  один подтип en_US. Создайте каталог res/xml, если его нет, и добавьте к нему файл method.xml. Содержимое файла должно быть следующим:

5. Редактирование строк.xml

Строки, используемые этим приложением, определены в файле theres/values/strings.xml. Нам понадобятся следующие три строки:

  • имя приложения
  • ярлык IME
  • ярлык подтипа IME

Обновите файл strings.xml, чтобы он имел следующее содержимое:

6. Определите макет клавиатуры

Макет нашей клавиатуры содержит только KeyboardView. Атрибут layout_alignParentBottom имеет значение true, чтобы клавиатура отображалась в нижней части экрана.

Создайте файл с именем res/layout/keyboard.xml и замените его содержимое следующим текстом:

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

6. Определите клавиши клавиатуры

Детали клавиш клавиатуры и их позиции указаны в файле XML. Каждый ключ имеет следующие атрибуты:

  • keyLabel: этот атрибут содержит текст, отображаемый на клавише.
  • codes: Этот атрибут содержит значения unicode символов, которые представляет ключ.

Например, чтобы определить ключ для буквы A, атрибут codes должен иметь значение 97, а атрибут keyLabel должен быть установлен в A.

Если с ключом связано несколько кодов, тогда символ, который представляет собой ключ, будет зависеть от количества нажатий, которые получает ключ. Например, если ключ имеет коды 63, 33 и 58:

  • одно нажатие на клавишу приводит к символу «?»
  • два быстрых нажатия приводят к символу «!»
  • три  отображают символ «:»

Ключ может также иметь несколько необязательных атрибутов:

  • keyEdgeFlags: этот атрибут может принимать значение left или right. Этот атрибут обычно добавляется к крайним левым и правым клавишам в строке.
  • keyWidth: этот атрибут определяет ширину клавиши. Обычно это определяется в виде процентного значения.
  • isRepeatable: если для этого атрибута установлено значение true, длительное нажатие клавиши будет повторять действие клавиши несколько раз. Обычно значение true установлено для клавиш удаления и пробела.

Клавиши клавиатуры сгруппированы в виде строк. Рекомендуется ограничить количество клавиш в строке до десяти, причем каждая клавиша имеет ширину, равную 10% от клавиатуры. В этом уроке высота клавиш установлена в 60dp. Это значение можно отрегулировать, но значения менее 48dp не рекомендуются. У нашей клавиатуры будет пять рядов ключей.

Теперь мы можем идти вперед и разрабатывать клавиатуру. Создайте новый файл с именем res/xml/qwerty.xml и замените его содержимое следующим текстом:

Возможно, вы заметили, что некоторые ключи имеют отрицательные значения в атрибуте codes. Отрицательные значения равны предопределенным константам для класса Keyboard. Например, значение -5 равно значению Keyboard.KEYCODE_DELETE.

7. Создание класса Service

Создайте новый класс Java и назовите его SimpleIME.java. InputMethodService и реализовать интерфейс OnKeyboardActionListener. Интерфейс OnKeyboardActionListener содержит методы, вызываемые при касании или нажатии клавиш экранной клавиатуры.

Класс SimpleIME должен иметь три переменные-члена:

  • KeyboardView, ссылающийся на представление, определенное в макете
  • Экземпляр Keyboard, который назначен для KeyboardView
  • boolean, сообщает нам  включен ли caps lock

После объявления этих переменных и добавления методов интерфейса OnKeyboardActionListener класс SimpleIMEдолжен выглядеть следующим образом:

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

Затем мы создаем метод, который воспроизводит звук при нажатии клавиши. Мы используем класс AudioManager для воспроизведения звука. Android SDK включает в себя несколько стандартных звуковых эффектов по умолчанию для нажатия клавиш, и они используются в методе playClick.

Наконец, обновите метод onKey, чтобы наше приложение могло взаимодействовать с полями ввода (как правило, EditText) других приложений.

Метод getCurrentInputConnection используется для получения соединения с полем ввода другого приложения. После подключения мы можем использовать следующие методы:

  • commitText для добавления одного или нескольких символов в поле ввода
  • deleteSurroundingText для удаления одного или нескольких символов поля ввода
  • sendKeyEvent для отправки событий, таких как KEYCODE_ENTER, во внешнее приложение

Всякий раз, когда пользователь нажимает клавишу на клавиатуре, onKey вызывается с использованием значения unicode ключа в качестве одного из его параметров. Основываясь на этом значении, клавиатура выполняет одно из следующих действий:

  • В случае, если код следующий - KEYCODE_DELETE, то один символ слева от курсора удаляется с помощью метода deleteSurroundingText.
  • В случае, Если код - KEYCODE_DONE, событие ключа KEYCODE_ENTER запускается.
  • В случае, Если код - KEYCODE_SHIFT, значение caps изменяется, а состояние нажатия клавиатуры обновляется с помощью метода setShifted. При изменении состояния нажатия клавиши должны быть перерисованы, чтобы надписи клавиш были обновлены.  InvalidateAllKeys используется для перерисовки всех ключей.
  • Для всех других кодов код просто преобразуется в символ и отправляется в поле ввода. Если код представляет букву алфавита, а переменная caps имеет значение true, то символ преобразуется в верхний регистр.

Обновите метод onKey, чтобы он выглядел так:

8. Тестирование клавиатуры

Итак, экранная клавиатура готова к тестированию. Скомпилируйте и запустите её  на устройстве Android. Это приложение не имеет Activity, что означает, что оно не появится в панели запуска. Чтобы использовать её, его следует сначала активировать в настройках устройства.

После активации Simple IME откройте любое приложение, которое позволяет вводить текст (например, любое приложение для обмена сообщениями) и понажимайте  по одному из его полей ввода. Вы должны увидеть значок клавиатуры в области уведомлений. В зависимости от вашего устройства вы можете щелкнуть по этому значку или перетащить панель уведомлений вниз и выбрать Simple IME в качестве метода ввода. Теперь вы можете использовать новую клавиатуру.

Заключение

В этом уроке вы научились создавать клавиатуру для Android с нуля. Чтобы изменить внешний вид вашей клавиатуры, все, что вам нужно сделать, это добавить дополнительный стиль в файлы theres / layout / keyboard.xml и res / layout / preview.xml. Чтобы изменить положение клавиш, обновите файл res / xml / qwerty.xml. Чтобы добавить дополнительные функции на клавиатуру, обратитесь к документации разработчика.


Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.