Clickable SpannableString в Android

У меня есть следующий код:

SpannableString ss = new SpannableString("Translators");
ClickableSpan myClickableSpan = new ClickableSpan()
{
    @Override
    public void onClick(View v) {
    // do something;
    }
};
ss.setSpan(myClickableSpan, 0, ss.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

Но когда я добавляю SpannableString в строку, она не кликабельна и не подчеркивается

String thanks="Also thanks the "+ss;

Любые идеи?


person Christos Thb    schedule 31.05.2015    source источник


Ответы (1)


Эта строка является проблемой:

String thanks="Also thanks the "+ss;

Правая часть выражения + представляет собой строку с расширением, а левая часть — обычную строку (без поддержки расширения). Оператор + для строк приводит к тому, что компилятор Java просто помещает .toString() после вашей переменной ss (защищенным от нулей способом), а преобразование строки с расширением в обычную строку отбрасывает диапазоны.

Чтобы это исправить, избавьтесь от конкатенации строк. Вы можете использовать SpannableStringBuilder вместо SpannableString и использовать метод insert(...), чтобы поместить туда "Also thanks to the" без потери промежутков.

Однако есть более простой способ, ваш код вопроса подошел довольно близко:

SpannableString ss = new SpannableString("Also thanks to the Translators");
ClickableSpan myClickableSpan = new ClickableSpan() { /*...*/ };

int spanStart = 20; // length of "Also thanks to the "
ss.setSpan(myClickableSpan, spanStart, ss.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
person Barend    schedule 31.05.2015
comment
TextUtils.concat("Also thanks the ", ss); тоже может пригодиться - person Mithun; 31.05.2015