【问题标题】:Create Custom Keyboard in Android在 Android 中创建自定义键盘
【发布时间】:2012-12-26 10:03:14
【问题描述】:

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

我想知道的:

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

【问题讨论】:

标签: android keyboard android-softkeyboard


【解决方案1】:

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

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

【讨论】:

  • 好吧,所以当我想在我的键盘上安装某种微调框或其他东西时,它变得非常困难,它可以让用户更改文本?我是对的吗?或者我可以在那里叠加一个新的布局吗?
  • 所以框架的那部分背后的想法是您将实现整个键盘敲击、预测等。这包括绘图。所以添加一个微调器应该不是问题,尽管事实上你是一个服务,IME 被允许建立一个 UI(唯一的这样的服务)。因此,只需将微调器放入您的布局中。如果您只想要一个没有预测的标准键盘,那么 Android 有很多帮助,但我不确定有多少 - 我们做了所有自定义,我们的布局只是一个自定义视图,我们自己绘制。
  • 好的,所以我会试一试,顺便说一句。除了来自 Google 的 SoftKey 之外,您知道任何其他示例代码吗?
  • 可能有一两个小教程,但不多。如果您进入 AOSP 代码,您可能会找到 android 的键盘。它曾经被称为“拉丁”。这是您最好的示例,您可以根据自己的喜好对其进行更改。
【解决方案2】:

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

创建输入法在互联网上的the Android developer documentation 中有介绍。

你们有示例代码吗?

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

我是否需要 root 才能执行此操作?

没有。

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

an InputMethodService

【讨论】:

  • 嗯在开发人员文档中没有找到它,顺便说一句 @CommonsWare 你的一本书是否涵盖了这个主题?
  • @safari:不,抱歉。它在列表中,但不是高优先级,因为它是一个相当专业的主题。
  • 好吧 =),对于最后一个问题,我是否可以读出我在输入框中输入的内容(无论是编辑文本),然后替换它?
  • @safari:我不熟悉 InputMethodService 在编辑现有文本方面的工作原理,抱歉。
  • @CommonsWare:感谢您的回答。我使用了 SoftKeyboard(在 android sdk 示例中给出)。但自动建议栏未显示在键盘中。如何在该软键盘中显示自动提示词。
【解决方案3】:
  1. 那里有很好的教程吗?你们有示例代码吗?

在此给个不错的教程:
http://code.tutsplus.com/tutorials/create-a-custom-keyboard-on-android--cms-22615

  1. 我是否需要 root 才能执行此操作?

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

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

您需要使用inputMethodService,请参阅documentation

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

根:没有

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

是的,这是可能的。

InputConnection ic = getCurrentInputConnection();
String currentText = ic.getExtractedText(new ExtractedTextRequest(), 0).text;

【讨论】:

  • 谢谢。 root: no 是什么?请编辑您的帖子。
  • @CoolMind 他的问题是我需要root我的设备来实现这样的事情,答案是否定的,那里没有什么可编辑的
  • 如果你再次看到你的答案,你会注意到它是第 2 号。你又在第 4 号中重复了它。
猜你喜欢
  • 2016-12-10
  • 2016-05-29
  • 2016-04-25
  • 1970-01-01
  • 2012-01-09
  • 2011-02-28
  • 2011-07-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多