Android ClickView TextView Как сделать несколько областей щелчков по тексту и выбору региона Catch

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

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

Я хочу, чтобы иметь возможность щелкнуть по отдельности три разных региона текста, чтобы получить один день, два дня или семь дней для трансляции. Я не хочу, чтобы это переместило 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());