Изменить цвет подчеркивания в Android - PullRequest
6 голосов
/ 07 октября 2011

Я занимаюсь разработкой приложения для Android.Мне нужно подчеркнуть некоторые элементы Textview.

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

Я использовал приведенный выше код для этого.Но теперь я хочу изменить цвет подчеркивания.Может кто-нибудь сказать мне, как это сделать.Любая помощь или предложение принимаются.

Ответы [ 3 ]

7 голосов
/ 08 ноября 2012

Нет задокументированного метода установки цвета подчеркивания.Однако существует недокументированный метод 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);
        }
    }
}
3 голосов
/ 07 октября 2011

Я сам не пробовал, так что это скорее идея, чем решение, но, вероятно, стоит попробовать.Класс 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),, поэтому я не уверен, как их использовать.

1 голос
/ 26 июня 2014

В TextPaint есть поле 'underlineColor' и метод 'setUnderlineText', обозначенные и используемые для изменения цвета подчеркивания.Но это поле и метод «@hide», чтобы использовать их, вы должны использовать отражение, например:

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

ds - это ваш объект TextPaint.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...