20

我想编写一个自定义键盘,它应该适用于所有运行 Android 4.0 及更高版本的设备。所以首先我搜索了网络,但没有找到任何相关信息。那么如何创建一个应用程序来替代 Android 的普通键盘呢?

我想知道的:

  1. 那里有很好的教程吗?你们有示例代码吗?
  2. 我需要root才能做到这一点吗?
  3. 它背后的结构是什么?(它只是一个带有服务的常规活动吗??)
  4. 是否可以读出键盘内的输入框?
4

3 回答 3

20

所以,当我在 Swype 工作时,我这样做了大约 2 年。你不需要root,你只需要实现一个InputMethodService。您可以从大多数文本框中获取文本,但不是全部(并非所有编辑字段都正确实现了它们的一半 API。尤其是输入类型为 INPUT_TYPE_NULL 的任何内容都无法正常工作)。要获取文本,您将调用 inputConnection.getExtractedText

请注意 - API 很糟糕,应用程序在使用它时会受到打击。一个基本的键盘很简单,但是尝试做任何复杂的事情,你会花费很多时间。大键盘投入了大量工时

于 2013-01-11T19:06:40.400 回答
9

所以首先我搜索了网络,但没有找到任何相关信息

在 Internet 上的 Android 开发人员文档中介绍了创建输入法。

你们有示例代码吗?

samples/如果您从 SDK 管理器下载了示例代码,那么您的 SDK 安装目录中有一个示例。寻找SoftKeyboard

我需要root才能做到这一点吗?

不。

它背后的结构是什么?(它只是一个带有服务的常规活动吗??)

它是一个InputMethodService.

于 2013-01-11T18:48:26.673 回答
2
  1. 那里有很好的教程吗?你们有示例代码吗?

这是一个很好的教程:
http ://code.tutsplus.com/tutorials/create-a-custom-keyboard-on-android--cms-22615

  1. 我需要root才能做到这一点吗?

不,不需要 root 来执行此操作。

  1. 它背后的结构是什么?(它只是一个带有服务的常规活动吗??)

您需要使用inputMethodService,请参阅文档

  1. 是否可以读出键盘内的输入框?

根:没有

是否可以读出键盘内的输入框?

是的,有可能。

InputConnection ic = getCurrentInputConnection();
String currentText = ic.getExtractedText(new ExtractedTextRequest(), 0).text;
于 2015-05-15T06:26:09.787 回答