Android 使用InputConnection.CommitteText在插入文本的开头设置光标

Android 使用InputConnection.CommitteText在插入文本的开头设置光标,android,android-edittext,inputconnection,Android,Android Edittext,Inputconnection,的文档说明newCursorPosition表示: int:文本周围的新光标位置,以Java字符表示如果> 0,这是相对于文本的结尾-1;如果这看起来像是代码中的一个缺陷,但由你来判断 查看BaseInputConnection中的。我相信这是插入后放置光标的代码。(replaceText()是从committetext()调用的) 在引用的代码中,a是选择的起点b是选择结束。由于示例中没有选择,且光标位于索引1处,因此a==b==1。此外,在光标移动到新选择之前,不会插入新文本(aaa)(替换

的文档说明
newCursorPosition
表示:

int:文本周围的新光标位置,以Java字符表示如果>
0,这是相对于文本的结尾-1;如果这看起来像是代码中的一个缺陷,但由你来判断

查看
BaseInputConnection
中的。我相信这是插入后放置光标的代码。(
replaceText()
是从
committetext()调用的)

在引用的代码中,
a
是选择的起点<代码>b是选择结束。由于示例中没有选择,且光标位于索引1处,因此
a==b==1
。此外,在光标移动到新选择之前,不会插入新文本(aaa)(替换选择[a,b])

Selection.setSelection(content,newCursorPosition)
设置光标位置,因此在您的示例中,如果0和1产生相同的位置,我希望两个输入的
newCursorPosition
的派生值相同

光标位于位置1的两个8之间,让我们仔细思考以下代码:

if (newCursorPosition > 0) {
    newCursorPosition += b - 1;
} else {
    newCursorPosition += a;
}
对于输入1,
newCursorPosition
>0,因此newCursorPosition=newCursorPosition+1-1或1

对于0的输入,
newCursorPosition
不是=0,因此newCursorPosition=newCursorPosition+a(0+1)或1

由于两个输入产生相同的值,我希望
Selection.setSelection(content,newCursorPosition)
产生您看到的结果


我没有完全按照代码到这个位置,但我相信这就是问题所在。我已经在带有API 21的像素仿真器上遵循了
BaseInputConnection
中针对
newCursorPosition=0
newCursorPosition=1
的执行路径,上面概述的内容确实适用。

为什么要为0显示两个不同的位置?也许0没有效果?在上一张图片中,我显示的是预期结果,而不是实际结果@重新阅读文档,我现在可以理解“你不能在文本中定位光标”的意思了。如果为
newCursorPosition
选择
0
,可以将光标移动到插入的开头,那么实际上这将允许您进行一些定位。正如您所说,这仍然感觉像是一个缺陷,但可能是可以理解的。@Suragch也许文档应该这样写:“如果>=0,这是相对于文本的结尾-1;如果<0,这是相对于文本的开头。”但是,我确实认为光标可以放在插入的开头,但这一定不是什么高需求的东西。(我已经加入了你对
a
b
的澄清解释)
inputConnection.commitText("aaa", 1);
inputConnection.commitText("aaa", -1);
inputConnection.commitText("aaa", 0);
if (newCursorPosition > 0) {
    newCursorPosition += b - 1;
} else {
    newCursorPosition += a;
}