8

我正在使用 Android 软键盘并想知道,有没有办法让键盘获取当前光标位置?我目前正在使用以下代码:

connection.getTextBeforeCursor(Integer.MAX_VALUE, 0).length()

但是,这非常慢(即使是少量文本,也可能需要长达 50 毫秒——在 Galaxy Nexus 上运行,因此对于低端手机来说这可能会更慢)。我还在 Droid Incredible 上对其进行了测试,而且延迟更加严重。

在函数 onUpdateSelection 中,您将获得新的光标位置。但是,此函数并不总是被调用,因此存储它提供的值以供将来使用是不可靠的。

既然可以设置光标位置并获取选定文本(但不能设置选定文本的位置),难道不应该有获取光标位置的函数吗?

谢谢您的帮助!

4

2 回答 2

9

这是一个较老的问题,但我最近遇到了同样的问题。获取光标位置:

InputConnection ic = getCurrentInputConnection();
ExtractedText et = ic.getExtractedText(new ExtractedTextRequest(), 0);
int selectionStart = et.selectionStart;
int selectionEnd = et.selectionEnd;
于 2013-08-14T17:31:15.463 回答
1

我在这里聚会晚了几年,但看起来这个问题在提供的上下文中没有得到回答。该问题指出,以下代码行最多需要 50 毫秒才能运行:

 connection.getTextBeforeCursor(Integer.MAX_VALUE, 0).length()

这可能是因为该getTextBeforeCursor(int, int)方法的 Android 实现似乎试图在搜索请求的字符之前实例化一个CharSequence长度为n的数组。在这种情况下,它试图实例化一个长度数组Integer.MAX_VALUE。返回的实际数组被修剪为适当的大小。

我一直在使用类似的方法从 中获取光标位置InputConnection,但将n的值限制为我控制的最大值。因此,如果我将 a 的最大字符数设置为EditText25 个字符,那么这将是我的n值。而且,它非常快。这是我的方法的一个例子:

int cursorPosition = mInputConnection.getTextBeforeCursor(MAX_CHARACTERS, 0).length();
于 2018-07-17T20:36:13.890 回答