Highlight text in multiple EditText controls simultaneously

android, android-edittext, highlight, java

Solution

I know, but its (as far as I know?) the only way to mark text in an EditText control.

EditText supports `Spannable` objects, so you can apply highlights to text (e.g., background colors) yourself.

This sample project demonstrates a search field that applies a background color to a larger piece of text based upon the search results. The key part is the `searchFor()` method:

  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);
  }

Note, though, that your "output string" probably should be a `TextView`, not an `EditText`. `EditText` is for input, not output.

Problem

I've got the following problem: I'm trying to highlight text in multiple `EditText` controls simultaneously by calling `viewXYZ.setSelection(int, int)`, but the selection is only visible on the focused view. Is there any way to bypass this, to highlight text in an unfocused `EditText`? Maybe by overloading the `onDraw()` methods?

Original source