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

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

Что я хотел бы знать:

  1. Есть ли хороший учебник там? У вас есть пример кода?
  2. Нужен ли мне root для этого?
  3. Какая структура за этим стоит? (Это просто обычная деятельность с сервисом??)
  4. Можно ли считывать поле ввода внутри клавиатуры?

3 ответа

Решение

Итак, я делал это около 2 лет, когда работал над Swype. Вам не нужен root, вам просто нужно реализовать InputMethodService. Вы можете получить текст из большинства текстовых полей, но не из всех (не все поля редактирования правильно реализуют свою половину API. В частности, все, что имеет тип ввода INPUT_TYPE_NULL, не будет работать хорошо). Чтобы получить текст, вы должны вызвать inputConnection.getExtractedText

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

Итак, сначала я искал в сети, но ничего не нашел об этом

Создание метода ввода описано в документации для разработчиков Android, которая находится в Интернете.

У вас есть пример кода?

Есть образец в samples/ каталог вашей установки SDK, если вы скачали пример кода из SDK Manager. Ищу SoftKeyboard,

Нужен ли мне root для этого?

Нет.

Какая структура за этим стоит? (Это просто обычная деятельность с сервисом??)

Это InputMethodService,

  1. Есть ли хороший учебник там? У вас есть пример кода?

Таким образом хороший учебник:
http://code.tutsplus.com/tutorials/create-a-custom-keyboard-on-android--cms-22615

  1. Нужен ли мне root для этого?

Нет, корень не требуется, чтобы сделать это.

  1. Какая структура за этим стоит? (Является ли это просто обычная активность с Service??)

Вам нужно использовать inputMethodServiceсм. документацию.

  1. Можно ли считывать поле ввода внутри клавиатуры?

корень: нет

Можно ли считывать поле ввода внутри клавиатуры?

Да, это возможно.

InputConnection ic = getCurrentInputConnection();
String currentText = ic.getExtractedText(new ExtractedTextRequest(), 0).text;
Другие вопросы по тегам