Android EditText代替


1 Answers

この記事では、テキストが変更されない静的なTextViewの最適化についてのみ説明していますが、より効果的なEditTextを作成するための正しい軌道に乗るかもしれません。

Question

現在、大量のテキスト行(10000+)を処理する場合、AndroidのEditTextは非常に遅いです。 この減速の一部は、EditTextがスパンをサポートしていることと、主にEditTextが各行の幅を計算していることが原因で、非常に高価です。 EditTextに代わるより速い選択肢、またはそれを最適化して使用可能にする方法はありますか?

編集:メソッドのトレースは次のとおりです:

android.text.StaticLayout.generate: 99.1% CPU time inclusive, 8.8% exclusive (1 call)
    android.text.Layout.getParagraphSpans: 28% inclusive, 1.1% exclusive (4686 calls)
    android.text.MeasuredText.setPara: 20.6% inclusive, 1.6% exclusive (2343 calls)
    android.text.MeasuredText.addStyleRun: 18.6% inclusive, 1.1& exclusive (2343 calls)
    android.text.SpannableStringBuilder.getSpans: 15% inclusive (of parent calls), 56.7% inclusive (of all calls, 47.3% of which are from android.text.Layout.getParagraphSpans, 26% are from android.text.MeasuredText.setPara, 26% are from android.text.StaticLayout.generate)



別の方法は、 TextViewを使用してテキストを表示し、それをEditTextとして動作させることEditText 。 方法は次のとおりです。

TextViewにOnClickListenerを設定してキーボードを表示します:

textView.setOnClickListener(new View.OnClickListener() {
    public void onClick(View v) {
        getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
        isEnteringText = true; //global
    }
});

また、 onKeyDownをオーバーライドし、キーボードのキーをTextViewに適用します:

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if(isEnteringText) {
        textView.append(event.getDisplayLabel());
        return true;
    }
    return super.onKeyDown(keyCode, event);
}

明らかに、これは後でキーボードを隠す、バックスペースと入力を処理する、クリップボードを処理するなど、多くの作業が必要になります。 私はちょっとこのポストの周りに私の答えを形成し、あなたがキーボードのキーを取得する際に問題がある場合は、そこに記載されている他の方法を試すことができます。 それらによると、上記のコードは言語が英語である限り動作します。




Related