2012-05-26 4 views
5

У меня есть следующая проблема: я пытаюсь выделить текст в нескольких элементах управления EditText, позвонив по телефону viewXYZ.setSelection(int, int), но выбор можно увидеть только на сфокусированном виде.Выделить текст несколькими элементами управления EditText одновременно

Есть ли способ обойти это, выделить текст в нефокусированном EditText? Может быть, перегружая методы onDraw()?

+1

'setSelection()' не для того, чтобы «выделить текст», а для установки выбора для операций cut/copy/paste. Следовательно, это только имеет смысл в «EditText» с фокусом. Какова ваша цель выделить текст в нескольких виджетах EditText? – CommonsWare

+0

Я знаю, но его (насколько я знаю?) Единственный способ отметить текст в элементе управления EditText. Я просто хочу преобразовать определенные строки ввода в реальном времени, и если вы нажмете на один раздел входной строки, я хочу выделить соответствующий раздел выходной строки. –

ответ

4

Я знаю, но его (насколько я знаю?) Единственный способ отметить текст в элементе управления EditText.

EditText поддерживает объекты Spannable, поэтому вы можете применять основные цвета к тексту (например, цвета фона) самостоятельно.

This sample project демонстрирует поле поиска, которое применяет цвет фона к большей части текста на основе результатов поиска. Ключевой частью является 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, не EditText. EditText предназначен для ввода, а не для вывода.

+0

Это именно то, что я искал, спасибо! :) –

+0

Спасибо @CommonsWare! – HeavyE

Смежные вопросы