8

私は Android ソフト キーボードに取り組んでいますが、疑問に思っていました。キーボードが現在のカーソル位置を取得する方法はありますか? 現在、次のコードを使用しています。

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

ただし、これは非常に遅いです (少量のテキストの場合でも、最大 50 ミリ秒かかることがあります。Galaxy Nexus で実行されているため、ローエンドの携帯電話ではさらに遅くなる可能性があります)。Droid Incredible でもテストしましたが、遅延はさらに深刻です。

関数 onUpdateSelection では、新しいカーソル位置が与えられます。ただし、この関数は常に呼び出されるとは限らないため、将来の使用のために提供される値を保存することは信頼できません。

カーソルの位置を設定して選択したテキストを取得できる (ただし、選択したテキストの位置は取得できない) ので、カーソル位置を取得する関数があればいいのではないでしょうか?

助けてくれてありがとう!

4

2 に答える 2

1

私はここでのパーティーに数年遅れていますが、提供されたコンテキスト内でこの質問に答えたようには見えません. 質問には、次のコード行の実行に最大 50 ミリ秒かかると記載されています。

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

これは、メソッドの Android 実装が、要求された文字を検索する前に、長さngetTextBeforeCursor(int, int)の配列をインスタンス化しようとしているように見えるためです。この場合、 length の配列をインスタンス化しようとしています。返される実際の配列は、適切なサイズにトリミングされます。CharSequenceInteger.MAX_VALUE

からカーソル位置を取得するために同様の方法を使用してきましたがInputConnectionnの値を制御できる最大値に制限しました。したがって、an の最大文字数EditTextを 25 文字に設定すると、それがnの値になります。そして、それはかなり速いです。これが私のアプローチの例です:

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