视图特定的输入法编辑器?

3
我有一个自定义视图,我希望用户可以输入应用程序定义的字符集中的字符。为此,据我所知,我需要编写一个输入法服务。用户不仅需要安装它,还需要在“设置”>“语言和键盘”中启用IME,然后选择自定义IME以在视图中使用。
这似乎非常疯狂。我只想让这个IME在一个应用程序的一个视图中使用。我不希望它在整个系统中可用或强制用户进行全局设置更改。
我唯一能想到的替代方案是定义自己的应用内自定义视图,并在视图获得焦点时模拟IME(可能是全屏的)。难道没有更好的方法吗?

1
顺便提一下,我刚才找到了一个非常相似的问题:https://dev59.com/3HI-5IYBdhLWcg3wW2-p 。答案也是一样的。 - Aleadam
三年后答案还是一样的吗? - Petr Peller
据我所知,它仍然是这样。自那时以来,我在发布说明或开发者博客中没有看到任何暗示。当然,我可能错过了,如果有人提供相反的信息,我将非常感激。 - Ted Hopp
1个回答

2
我认为输入法不是为这种任务而设计的。它们的概念是以标准化的方式允许用户输入,以便可以在来自不同供应商的多个应用程序中使用。
我的策略与您的想法类似:
- 防止软键盘出现, - 拦截菜单按钮按键以显示您自己的菜单, - 添加自定义布局(可能是一个相对布局内的网格视图或表视图,并具有底部重力), - 使用 OnItemClickListener, - 将所需的 KeyEvent 发送到根 View。如果字符是虚构的,则 KeyCodes 甚至不需要与 ASCII 字符相关联。您只需要拦截代码并随意使用即可。
很抱歉我无法像您要求的那样提供选项,但这种替代方案似乎并不比创建全新的输入法更费力。
编辑:阅读相关问题后,使用 android.inputmethodservice.KeyboardView 而不是重新发明 GridView 是有道理的。

如果我想要复制 IME 的所有行为,实际上还有很多工作要做。就我所知:滑动应用程序以腾出键盘不遮挡目标视图;提供全屏模式;处理配置更改等等。 - Ted Hopp
1
@Ted,我不知道你的应用程序在做什么,但如果它是一个非常特定的用途而不是多功能键盘,那么你可以解决一些限制(例如,你不需要滚动视图来保持显示EditText小部件,你可以将其添加到你的键盘中并传输整个文本)。你只需要实现你的应用程序所需的内容。 - Aleadam
3
听起来很合理。这可能就是我最终要做的,包括像你建议的那样使用KeyboardView。Android团队开发了这么棒的基础设施,但却只在全局范围内提供。这让我想起Java中如何处理字体:将它们安装在计算机上,然后Java可以使用它们。最终增加了一种使用特定于应用程序的字体的能力,而无需在系统范围内安装它。尽管你的回答只是一个好听的“不”,但我(可悲地)将其标记为解决方案。 - Ted Hopp

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接