ClickView для Android TextView Как сделать несколько кликов областей на выбор текста и области захвата

Я хочу сделать несколько частей текста индивидуально кликабельными, например, в тексте ниже:

Получите прогноз погоды один день, два дня, семь дней.

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

1 ответ

Решение

Вы должны быть в состоянии сделать это с помощью ClickableSpan, В основном вам нужно создать SpannableStringBuilder, добавьте текстовые части и установите разные ClickableSpan для каждой интерактивной текстовой части.

SpannableStringBuilder sb = new SpannableStringBuilder();
String regularText = "This text is ";
String clickableText = "clickable";
sb.append(regularText);
sb.append(clickableText);
sb.setSpan(new ClickableSpan(), sb.length()-clickableText.length(), sb.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
TextView tv = ...
tv.setText(sb);

Это всего лишь пример, иллюстрирующий, как установить один ClickableSpan. Очевидно, что в цикле будет больше смысла делать выше и устанавливать новый диапазон с каждой итерацией.

Однако, поскольку ClickableSpan является абстрактным классом, вам сначала нужно расширить его с помощью своей конкретной конкретной реализации. Более конкретно, метод onClick должен быть реализован для обработки событий щелчка.

Кроме того, не забудьте установить MovementMethod для TextView, например LinkMovementMethod:

tv.setMovementMethod(LinkMovementMethod.getInstance());
Другие вопросы по тегам