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

Створення користувачем клавіатури на Android 

Difficulty:BeginnerLength:LongLanguages:

Ukrainian (українська мова) translation by Elen (you can also view the original English article)

Final product image
What You'll Be Creating

Більшість пристроїв андроїд не мають клавіатури. Вони покладаються на віртуальну або екранну клавіатуру для введення тексту користувачем. Якщо ви захоплюєтеся персоналізацією Android-пристроїв, знання, як користувач може створити екранну клавіатуру, можуть підняти ваше хобі на абсолютно новий рівень.

Використовуючи Android SDK, ви можете швидко створити екранну клавіатуру за допомогою на диво невеликої кількості рядків коду, тому що SDK виконує безліч задач простого рівня, таких як розпізнавання доторку до клавіші, малювання клавіатури та встановлення зв’язків між клавіатурою та полями введення.

В цьому уроці ви дізнаєтесь, як створити повнофункціональну екранну клавіатуру, яка слугуватиме вам в якості клавіатури Android по замовчуванню.

1. Необхідні вимоги.

Вам потрібно буде встановити Eclipse ADT Bundle. Ви можете завантажити його на сайті Android Developer.

2. Створіть новий проект.

Запустіть програму Eclipse та створіть новий додаток для Android. Назвіть додаток SimpleKeyboard. Переконайтесь, що ви обрали унікальне ім’я пакета. Встановіть мінімальну необхідну версію SDK – Android 2.2 та встановіть бажаний SDK – Android 4.4.

Даний додаток не матиме ніяких дій, тому зніміть галочку з Create Activity та натисніть Finish.

3. Редагуємо маніфест

Операційна система Android приймає екранну клавіатуру як Input Method Editor (IME). IME об'являється як Service в AndroidManifest.xml, який використовує дозвіл  BIND_INPUT_METHOD та відповідає за дію android.view.InputMethod.

Додайте наступні рядки до застосування тегу application маніфесту:

4. Створіть method.xml

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

5. Редагування strings.xml

Рядки, які використовує даний додаток визначені в файлі res/values/strings.xml. Нам потрібні будуть три рядки:

  • Ім’я додатка
  • Ярлик IME
  • Ярлик підтипу IME

Обновіть ваш strings.xml, щоб він містив наступне:

6. Визначте макет клавіатури.

Макет нашої  клавіатури містить тільки  KeyboardView. Атрибут layout_alignParentBottom має значення true, щоб клавіатура з’являлась внизу екрана.

Створіть файл з іменем  res/layout/keyboard.xml, та замініть його вміст наступним:

keyPreviewLayout – це макет  pop-up вікна, яке з'являється при кожному натисканні клавіші на клавіатурі. Він містить єдиний TextView. Створіть файл з іменем res/layout/preview.xml та додайте до нього наступне:

6. Визначте клавіші клавіатури.

Деталі клавіш клавіатури та їхнє розміщення прописані в файлі XML. Кожна клавіша має наступні атрибути:

  • keyLabel: атрибут містить текст, який відображається на клавіші.
  • codes: цей атрибут містить значення юнікоду символів, які представляє клавіша.

Наприклад, щоб визначити клавішу для літери A, атрибут  codes повинен мати значення 97, а атрибут keyLabel повинен бути встановлений на A.

Якщо з клавішею пов'язано декілька кодів, тоді символ, який визначається клавішею, залежатиме від кількості натискать на неї. Наприклад, якщо клавіша має коди: 63, 33 і 58:

  • Одне натискання на клавішу – і ми отримуємо символ «?»
  • Два швидких натискання – і ми отримуємо символ «!»
  • Три швидких послідовних натискань – отримуємо «:».

Також, клавіша може мати декілька додаткових атрибутів:

  • keyEdgeFlags: даний атрибут може приймати значення left або right. Даний атрибут зазвичай додається до крайніх лівих і правих клавіш в рядку.
  • keyWidth: даний атрибут визначає ширину клавіші. Зазвичай він має значення у відсотках.
  • isRepeatable: якщо значення цього атрибуту true, тривале натискання на клавішу буде викликати повторення дії клавіші декілька разів. Як правило, значення true встановлюють для клавіш delete і spacebar.

Клавіші клавіатури згруповані по рядам. Дуже хорошою практикою є обмеження кількості клавіш в рядку – максимум 10, при цьому кожна клавіша має ширину, рівну 10% ширини всієї клавіатури. В даній статті ми встановили висоту клавіші 60 dp. Дане значення можна змінювати, але не рекомендується використовувати висоту менше 48 dp. На нашій клавіатурі буде п’ять рядків клавіш.

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

Ви напевне помітили, що деякі клавіші мають від’ємне значення в атрибуті codes. Від’ємні значення рівні визначеним константам класу Keyboard. Наприклад, значення -5 дорівнює значенню Keyboard.KEYCODE_DELETE.

7. Створіть клас Service.

Створіть новий клас Java та назвіть його SimpleIME.java. Клас повинен поширюватись на InputMethodService і реалізувати інтерфейс OnKeyboardActionListener. Інтерфейс OnKeyboardActionListener містить методи, які викликаються при натисканні на клавіші екранної клавіатури.

Клас SimpleIME  повинен мати 3 змінні членів:

  • KeyboardView, який посилаються на вигляд, який задано в макеті.
  • Экземпляр Keyboard, призначений для KeyboardView
  • boolean, який повідомляє нам, чи включений caps lock.

Після об’явлення даних змінних і додавання методів інтерфейсу OnKeyboardActionListener, клас  SimpleIME повинен виглядати наступним чином:

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

Далі, ми створюємо метод, який відтворює звук при натисканні на клавішу. Для цього ми використовуватимемо клас AudioManager. Android SDK включає декілька звукових ефектів при натисканні на клавішу по замовчуванню, саме вони і використовуються в методі playClick.

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

Метод getCurrentInputConnection використовується для встановлення взаємодії з полем вводу іншого додатку. Після встановлення взаємодії ми можемо використовувати наступні методи:

  • commitText, щоб додати один, або більше символів в поле вводу.
  • deleteSurroundingText, щоб видалити один, або більше символів в полі воду.
  • sendKeyEvent, щоб відіслати події на зразок KEYCODE_ENTER в зовнішній додаток.

Як тільки користувач натискає клавішу на екранній клавіатурі, викликається метод onKey зі значенням юнікоду клавіші (як один із її параметрів). Залежно від цього значення, клавіатура виконує одну з наступних дій:

  • Якщо код – KEYCODE_DELETE, то один символ зліва курсору видаляється за допомогою методу deleteSurroundingText.
  • Якщо код наступний – KEYCODE_DONE, тоді запускається подія KEYCODE_ENTER.
  • Якщо код – KEYCODE_SHIFT, значення змінної caps міняється і стан клавіатури змінюється за допомогою метода setShifted. Коли міняється стан, клавіатура повинна малюватися заново, щоб написи на клавішах оновлювалися. Метод invalidateAllKeys використовується для повторного малювання всіх клавіш.
  • Для решти коду він автоматично перетворюється в символ і відправляється в поле вводу. Якщо код представляє букву алфавіту і змінна caps набуває значення true, тоді літера стає великою.

Обновіть метод onKey, щоб він мав наступний вигляд:

8. Тестування клавіатури

Тепер екранна клавіатура готова до тестування. Скомпілюйте та протестуйте її на пристрої Android . Даний додаток не має Activity, а це означає, що він не буде відображатися в на панелі запуску. Спочатку активуйте його в налаштуваннях вашого пристрою, а потім використовуйте.

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

Закінчення

В даному уроці ви навчились створювати власну клавіатуру з нуля. Щоб змінити вигляд вашої клавіатури, вам потрібно внести додаткові зміни щодо стилю в файл res/layout/keyboard.xml і res/layout/preview.xml. Щоб змінити розміщення клавіш, обновіть файл res/xml/qwerty.xml. Щоб додати до вашої клавіатури більше функцій, поцікавтесь документацією розробника.


Advertisement
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.