7

EditText次の問題があります。を呼び出して複数のコントロールのテキストを同時に強調表示しようとしていますviewXYZ.setSelection(int, int)が、選択範囲はフォーカスされたビューにのみ表示されます。

これを回避して、焦点の合っていないテキストを強調表示する方法はありますEditTextか?たぶんonDraw()メソッドをオーバーロードすることによって?

4

1 に答える 1

4

私は知っていますが、(私が知る限りでは)EditTextコントロールでテキストをマークする唯一の方法です。

EditTextはSpannableオブジェクトをサポートしているため、テキスト(背景色など)に自分でハイライトを適用できます。

このサンプルプロジェクトは、検索結果に基づいて大きなテキストに背景色を適用する検索フィールドを示しています。重要な部分はsearchFor()方法です:

  private void searchFor(String text) {
    TextView prose=(TextView)findViewById(R.id.prose);
    Spannable raw=new SpannableString(prose.getText());
    BackgroundColorSpan[] spans=raw.getSpans(0,
                                             raw.length(),
                                             BackgroundColorSpan.class);

    for (BackgroundColorSpan span : spans) {
      raw.removeSpan(span);
    }

    int index=TextUtils.indexOf(raw, text);

    while (index >= 0) {
      raw.setSpan(new BackgroundColorSpan(0xFF8B008B), index, index
          + text.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
      index=TextUtils.indexOf(raw, text, index + text.length());
    }

    prose.setText(raw);
  }

ただし、「出力文字列」はおそらく。TextViewではなく、である必要があることに注意してくださいEditTextEditText出力ではなく入力用です。

于 2012-05-26T18:47:28.813 に答える