解释我想要做什么
我正在制作一个自定义应用内键盘,其工作原理与此示例相同。但是,在我的键盘中,我使用弹出窗口来显示额外的字母形式。在传统的蒙古文中,字母有不同的形式,具体取决于它们是位于单词的开头、中间还是结尾。通常这些可以从上下文中确定,但有时用户需要从弹出键候选中明确选择替代形式。
假设用户开始输入一个单词(其中-
代表字母):
---
然后他们a
从弹出窗口中选择(我只是a
用来表示选择一种特殊的蒙古字形形式的概念)。如果他们继续输入,这封信的 Unicode 将呈现如下:
---a--
但是,Unicode 呈现为
---A
在词尾。(a
并且A
在 Unicode 中有相同的代码。)所以用户很困惑为什么他们a
从弹出键中选择,但它会像A
在编辑器中一样呈现。但是,如果他们只是继续打字,那会很好,因为它会呈现a
在单词的中间。
我想要做的是在 of 上设置某种临时跨度a
,---a
这样它就不会像---A
在他们键入下一个字母之前那样被渲染。但是如果他们添加一个空格或将光标移动到不同的位置,那么它将恢复---A
为最终字母的默认形式。(即临时跨度将被取消。)
真实例子
如果抽象a
而A
过于混乱,这里有一个真实的例子。用户想在这个词中输入一个蒙古语UE
形式(Unicode )\u1826\u180c
但是因为\u1826\u180c
在词尾呈现这样
用户在继续输入之前会感到困惑。我希望跨度使它看起来像这样
可以用 . 临时渲染\u1826\u180c\u200d
。
文档
文件说_
如果您的 IME 进行文本预测或需要多个步骤来编写字形或单词,您可以在文本字段中显示进度,直到用户提交单词,然后您可以将部分合成替换为完整的文本。
它给出了这个例子和图像:
InputConnection ic = getCurrentInputConnection();
ic.setComposingText("Composi", 1);
ic.setComposingText("Composin", 1);
ic.commitText("Composing ", 1);
问题
我打算在本节中描述它为什么不起作用,但在此处设置我的问题的过程中,我发现它确实有效。因此,我将在下面添加我的答案作为其他人做类似事情的示例。