2011-05-04 82 views
3

我有一个自定义视图,我希望用户能够从应用程序定义的一组字符中输入字符。要做到这一点,据我了解,我需要编写一个输入法服务。用户不仅需要安装它,而且还需要在设置>语言&键盘中启用IME,然后选择用于视图中的自定义IME。视图特定的IME?

这看起来很疯狂。我希望这个IME只用于一个应用程序中的一个视图。我不希望它在系统范围内可用或强制用户进行全局设置更改。

我可以看到的唯一选择是定义我自己的应用内自定义视图,并在视图获得焦点时模拟IME(可能是全屏)。没有更好的吗?

+1

顺便说一句,我刚才发现了一个非常类似的问题:http://stackoverflow.com/questions/1896939/android-app-specific-soft-keyboard。同样的答案。 – Aleadam 2011-05-04 22:05:27

+0

3年后答案还是一样吗? – 2014-05-15 12:31:45

+0

@PetrPeller - 据我所知,它仍然是。自从发布说明或开发人员博客以来,我都没有看到任何其他建议。 (当然,如果有人提供了相反的信息,我可能会错过它)。 – 2014-05-15 15:47:47

回答

2

我不认为IME是为这种任务而设想的。他们的理念是允许用户以标准化的方式输入,以便可以跨不同供应商的多个应用程序使用。

我的策略将类似于你在想什么:

  • 防止软键盘出现,
  • 拦截菜单按钮,按键,显示你自己的,而不是,
  • 添加自定义布局(可能是一个GridViewTableView内的RelativeLayout与底部重力)
  • 使用OnItemClickListener
  • 发送requir编辑KeyEvent s到根View。如果字符是发明的,则KeyCodes甚至不需要与ASCII字符相关。你只需拦截代码并随意使用。

对不起,我不能给你一个选项,因为你问,但这个替代似乎没有比创建一个全新的IME更多的工作。

编辑:在阅读相关问题时,使用android.inputmethodservice.KeyboardView代替用GridView重新发明轮子是有意义的。

+0

如果我想重现IME的所有行为,实际上还有很多事情要做。关闭我的头顶:平移应用程序,为键盘腾出空间而不遮挡目标视图;提供全屏模式;处理配置更改。 – 2011-05-04 22:24:51

+1

@Ted我不知道你的应用在做什么,但如果它是一个非常具体的用途而不是多用途键盘,那么你可以解决一些限制(例如,你不需要滚动视图来继续显示EditText小部件,你可以添加一个到你的键盘,然后传输整个文本)。你只需要实现你的应用程序需要的东西。 – Aleadam 2011-05-05 01:19:04

+1

这听起来很合理。这可能是我最终要做的,包括像你所建议的那样使用KeyboardView。似乎很奇怪的是,Android开发人员开发了这种优秀的基础架构,但随后仅在全球范围内提供。它让我想到如何在Java中处理字体:将它们安装到您的机器上,然后Java可以使用它们。最终增加了使用特定于应用程序的字体的能力,而无需在系统范围内进行安装。我(可惜的是)将你的答案标记为解决方案,尽管它只是一个很好的“不”。 – 2011-05-05 01:33:01