0

それで、これが問題です。contenteditable div を表示する WebView があります。これで、テキストを選択すると、すべて問題なく動作し、javascript インターフェースを介して、document.getSelection() が本来の値を返すことがわかります。ただし、何かを入力すると、現在のノードで選択したテキストを置き換えるのではなく、対応するオフセットで最初のノードのテキストを置き換えるように見えます。たとえば、私が持っている場合

Blah1
Blah2
Blah3
Blah4

「ah4」を選択して「q」と入力すると、

Blq
Blah2
Blah3
Blah4

それ以外の

Blah1
Blah2
Blah3
Blq

ソフト キーボードではなくハードウェアキーボードを使用してエミュレータで実行すると、正常に動作することに気付きました。

イベントをインターセプトして手動で処理しようとしましたが、テキストを置き換えるときにイベントもonKeyListenerJavaScriptonKeyDownも登録もしません。onKeyPressJavascriptonInputは登録されますが、置換が行われた後でのみ登録されます。

これを回避する方法はありますか?


詳細情報:

結局のところ、テキストが選択され、ソフト キーボードでキーが押された場合、そのキープレスはアクティビティの dispatchKeyEvent メソッドを通過しません。この違いがグリッチ発生の根本的な原因ではないかと推測しています。なぜ、どのようにこれが起こるのか、そしてなぜそれがグリッチを引き起こすのか知っている人はいますか? コード実行の経路をたどることができるかどうか見に行きます。

4

1 に答える 1

0

ハッ!解決策を見つけました!Androidソースをいじりすぎた後、最終的に次のことを試しました:WebViewをサブクラス化し、次のメソッドをオーバーライドします:

@Override
public InputConnection onCreateInputConnection(EditorInfo outAttrs) {
    return new BaseInputConnection(this, false);
}

そして、それはそれを行います!確かに、選択した部分 (青いストライプ) は、入力した後も視覚的に残っていますが、少なくとも期待どおりのテキストに置き換わっており、ストライプは何の影響もありません。さらに、とにかく、それは以前にそれをしました。それを取り除くかなり簡単な方法もあると思います。

于 2013-11-09T07:39:47.587 に答える