あなただけのシングルラインregexn /ハイライト、あなたの提案の戦略をやっている場合を除きたとえば、あなたは複数のラインのCOMにいるかどうかは分かりません複数の行を走査しなくてもよい。 :-)
まだ行っていない場合は、Traceviewを使用して減速が具体的にどこにあるかを特定します。十分な他のものを最適化できるかもしれません。たとえば、すべてのPattern
オブジェクトを静的に定義するのではなく、その場でコンパイルしているとします。
それ以外では、ユーザーが一時停止したときにのみ構文の強調表示を適用するのが典型的なパターンだと思います。 ((あなたはおそらくすでににフックしている)すべてのテキストの変更には、postDelayed()
Runnable
とあなたのEditText
サブクラスのデータメンバにSystemClock.uptimeMillis()
から取得したタイムスタンプを保存します。
ステップ#1:それを実現するための1つの可能な方法は次のようになりますシンタックスカラーリングロジックがあればどこでも)。この回答の目的のために、postDelayed()
と使用する遅延期間をDELAY
とします。
Runnable
は、SystemClock.uptimeMillis()
の現在の時刻と最後のテキスト変更の時刻を比較します。時差がDELAY
未満の場合は、このRunnable
が予定されていた時点でユーザーが何かを入力したことを知っているので、何もしないだけです。時間差> = DELAY
の場合は、構文カラーリングロジックを実行します。
この方法では、ユーザーが一時停止するまで構文カラーリングを適用せずに、入力を中断しないようにします。 DELAY
を調整するか、設定可能にすることができます。
ところではオープンソースライブラリとしてリリースする計画ですか? :-)
あなたは実際に命を救っています!ありがとう、あなたの答えは私の問題の完璧な解決策です。私は、ライブラリが強調表示されていないことに驚いています。まともなものを作るのはかなり簡単です。あなたの質問に答えるには:私は自分のアプリでこのライブラリを使用しているので、わかりません。もう一度、ありがとう! – AlexPriceAP
@AlexPriceAP:「ライブラリを強調表示するライブラリがなくてすごく驚きました。まともなものを作るのはかなり簡単です」 - ええ、私たちはすべて怠け者です。再利用を促進する。 :-) – CommonsWare
Hehe:P。あなたの助けをもう一度ありがとう。驚くばかり! – AlexPriceAP