2013-01-26 5 views
6

Questa domanda è un follow-up alla mia ultima domanda: How to highlight text like Android spell-checker?Come impostare il colore di UnderlineSpan?

sto usando un UnderlineSpan per sottolineare il testo in un EditText ma ho bisogno la sottolineatura di essere A COLORI come questo screen shot del correttore ortografico:

enter image description here

+0

Questo è probabilmente il migliore che farete: http : //stackoverflow.com/questions/7684560/change-the-color-of-the-underline-in-android ... O, forse: http://stackoverflow.com/questions/13238298/android-change-underline -color-from-an-edittext-dynamically – Eric

+0

Grazie ma sfortunatamente la prima soluzione non ha funzionato (entrambe le risposte) e non posso usare la seconda da la mia app è una tastiera, che non può accedere direttamente a EditText. –

+0

Il problema è che non esiste un metodo supportato da API per farlo, almeno non su Android di serie. – Eric

risposta

2

Purtroppo, non è possibile farlo solo con uno Span - non ci sono metodi pubblici per fare ciò che si chiede. C'è un metodo per impostare il colore della sottolineatura in TextPaint indipendentemente dal colore del testo (puoi vederlo nel codice sorgente per SuggestionSpan) ma it's hidden.

Se riesci ad accedere a EditText, puoi gestire lo Span e tracciare la sottolineatura da solo, ma altrimenti non sei fortunato.

0

Questo è quanto ho fatto funzionare

Spanned part_1 = Html.fromHtml(getString(R.string.part1)); 
Spanned part_2 = Html.fromHtml("<u><font color='#2eb6f0'>Text in blue</font></u>"); 
Spanned part_3 = Html.fromHtml(getString(R.string.part3)); 
Spanned output = (Spanned) TextUtils.concat(part_1, part_2, part_3); 

textview.setText(output, TextView.BufferType.SPANNABLE); 
1

qui è la funzione che può essere utilizzato per impostare il colore della linea sotto il testo

public void addUnderLineLink(TextView mTextView) { 
    if (mTextView != null) { 
     SpannableString content = new SpannableString(mTextView.getText().toString()); 
     UnderlineSpan us=new UnderlineSpan(); 
     TextPaint tp=new TextPaint(); 
     tp.setColor(ContextCompat.getColor(getContext(),R.color.white)); 
     us.updateDrawState(tp); 
     content.setSpan(us, 0, mTextView.getText().toString().length(), 0); 
     mTextView.setText(content); 
    } 
}