10

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

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

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

4

4 に答える 4

14

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

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);
        }
    }
}
于 2012-11-08T10:43:52.807 に答える
3

私はこれを自分で試したことがないので、これは解決策というよりはアイデアですが、おそらく試す価値があります。クラスUnderlineSpanには、パラメータとして受け取るメソッドupdateDrawStateがありTextPaintます。次に、TextPainはフィールドを持つことができますpublic int linkColor

だからあなたにとってそれは次のようなものになるでしょう

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

TextPaint両方のリファレンスUnderlineSpanは非常に貧弱で、javadocの大部分が完全に欠落しているため(自分で判断してください:http://developer.android.com/reference/android/text/TextPaint.html)、これらの使用方法がわかりません。けれど。

于 2011-10-07T08:17:58.747 に答える
1

TextPaint には、フィールド「underlineColor」とメソッド「setUnderlineText」があり、下線の色を変更するために使用できます。しかし、それらは '@hide' フィールドとメソッドです。それらを使用するには、次のようにリフレクションを使用する必要があります。

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

ds は TextPaint オブジェクトです。

于 2014-06-26T08:30:54.663 に答える