2012-05-26 11 views
5

Ho il seguente problema: Sto tentando di evidenziare il testo in più controlli EditText contemporaneamente chiamando viewXYZ.setSelection(int, int), ma la selezione è visibile solo sulla vista focalizzata.Evidenzia il testo in più controlli EditText contemporaneamente

C'è un modo per aggirare questo, per evidenziare il testo in un EditText non a fuoco? Forse sovraccaricando i metodi onDraw()?

+1

'setSelection()' non deve "evidenziare il testo", ma impostare la selezione per le operazioni di taglia/copia/incolla. Quindi, ha senso solo su "EditText" con il focus. Qual è il tuo obiettivo per evidenziare il testo in più widget di 'EditText'? – CommonsWare

+0

Lo so, ma è (per quanto ne so?) L'unico modo per contrassegnare il testo in un controllo EditText. Voglio solo convertire determinate stringhe di input in tempo reale, e se clicchi su una sezione della stringa di input, voglio evidenziare la sezione appropriata della stringa di output. –

risposta

4

Lo so, ma è (per quanto ne so?) L'unico modo per contrassegnare il testo in un controllo EditText.

EditText supporta Spannable oggetti, in modo da poter applicare evidenzia al testo (ad esempio, i colori di sfondo) da soli.

This sample project mostra un campo di ricerca che applica un colore di sfondo a una porzione di testo più grande in base ai risultati della ricerca. La parte fondamentale è il metodo 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); 
    } 

nota, però, che il vostro "stringa di output", probabilmente dovrebbe essere un TextView, non un EditText. EditText è per input, non output.

+0

Era esattamente quello che stavo cercando, grazie! :) –

+0

Grazie a @CommonsWare! – HeavyE

Problemi correlati