2011-10-07 25 views
5

Sto sviluppando l'applicazione Android. Devo sottolineare alcune delle Textview.Cambia il colore della sottolineatura in Android

SpannableString content = new SpannableString("Ack:"); 
content.setSpan(new UnderlineSpan(), 0, content.length(), 0); 
tvAck.setText(content);` 

Ho usato il codice sopra per quello. Ma ora voglio cambiare il colore della sottolineatura. Qualcuno può dirmi come farlo. Qualsiasi aiuto o suggerimento è accettato.

risposta

3

Non l'ho provato da solo, quindi questa è più un'idea che una soluzione, ma probabilmente vale la pena provare. La classe UnderlineSpan ha il metodo updateDrawState, che prende come parametro TextPaint. A sua volta, TextPain può avere il campo public int linkColor.

Quindi per te sarebbe qualcosa di simile

TextPaint tp = new TextPaint(); 
tp.linkColor = [your color];   //not quite sure what the format should be 
UnderlineSpan us = new UnderlineSpan(); 
us.updateDrawState(tp); 
SpannableString content = new SpannableString("Ack:"); 
content.setSpan(us, 0, content.length(), 0); tvAck.setText(content); 

di riferimento sia per TextPaint e UnderlineSpan sono molto poveri, con la maggioranza dei javadoc manca del tutto (giudicate voi stessi: http://developer.android.com/reference/android/text/TextPaint.html), quindi non sono certo come per usare questi però.

+0

non funzionerà hai altri suggerimenti. –

+0

Non riesco a pensare ad altro. Perché non funzionerà? Hai provato? –

+0

si ho. Ma non cambierà il colore della sottolineatura. –

5

Non esiste un metodo documentato per impostare il colore di sottolineatura. Tuttavia, v'è un TextPaint.setUnderline(int, float) metodo non documentato che permette l'utente fornisce il colore della sottolineatura e lo spessore:

final class ColoredUnderlineSpan extends CharacterStyle 
           implements UpdateAppearance { 
    private final int mColor; 

    public ColoredUnderlineSpan(final int color) { 
     mColor = color; 
    } 

    @Override 
    public void updateDrawState(final TextPaint tp) { 
     try { 
      final Method method = TextPaint.class.getMethod("setUnderlineText", 
                  Integer.TYPE, 
                  Float.TYPE); 
      method.invoke(tp, mColor, 1.0f); 
     } catch (final Exception e) { 
      tp.setUnderlineText(true); 
     } 
    } 
} 
+0

Ho provato questo e l'invocazione funziona ma il colore della sottolineatura è ancora nero. :( –

+2

Ha funzionato perfettamente per me, come nota ad altri la 1.0f è il moltiplicatore dello spessore della linea.Un valore di 1.0 significa spessore predefinito, 2,0 sarebbe doppio dello spessore –

+0

Funziona, ma il colore e lo spessore non vengono ripristinati da parcellizzabile ( –

1

In TextPaint, ci deve un campo 'underlineColor' e il metodo 'setUnderlineText', indicata e può usare per modificare la sottolineatura colore. Ma, sono campo '@hide' e metodo, di usarli, è necessario riflettere utilizzando, in questo modo:

Field field = TextPaint.class.getDeclaredField("underlineColor"); 
field.setAccessible(true); 
field.set(ds, mUnderlineColor); 

ds è il tuo TextPaint oggetto.

Problemi correlati