2011-10-07 22 views
5

私はアンドロイドアプリケーションを開発しています。私はTextviewの一部に下線を引く必要があります。アンドロイドの下線の色を変更してください

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

私はそれに上記のコードを使用しました。しかし、今私は下線の色を変更したい。誰にでもそうする方法を教えてもらえますか?どんな助けや提案も受け入れられます。

答えて

3

私はこれを試していないので、これは解決策よりもアイデアですが、試してみる価値があります。クラスUnderlineSpanは、をパラメータとするメソッドupdateDrawStateを持ちます。次に、TextPainはフィールドpublic int linkColorを持つことができます。

だから、あなたのためにそれは(裁判官自身のために:http://developer.android.com/reference/android/text/TextPaint.html)のjavadocの大半が完全に欠落しているとの両方TextPaintUnderlineSpanが非常に悪いため

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

リファレンスのようなもの、になりますので、私はどのようにかどうか分かりませんこれらを使用する。

+0

これ以上の提案はありません。 –

+0

私は他の何かを考えることができません。なぜそれは動作しませんか?それを試しましたか? –

+0

はい私は持っています。しかし、下線の色は変わりません。 –

5

下線の色を設定する方法はありません。ただし、下線の色や太さを提供行うことができます文書化されていないTextPaint.setUnderline(int, float)方法がある:TextPaintで

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

私はこれを試して、呼び出しは動作しますが、下線の色はまだ黒です。 : –

+2

他の人のメモとして、1.0fは線の太さの乗数です1.0の値はデフォルトの太さを意味し、2.0は2倍の太さを意味します –

+0

これは機能しますが、色と太さは復元されませんパーセルブル( –

1

は、フィールドが持っている「underlineColor」と方法「setUnderlineText」、示され、下線を変更するために使用することができます色。しかし、彼らはそれらを使用するために、「@hide」フィールドやメソッドです、あなたは、反射使用しなければならない、このように:

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

DSあなたTextPaintオブジェクトです。

関連する問題