Страницы

Поиск по вопросам

воскресенье, 12 мая 2019 г.

Создание ссылок TextView на Android

помогите с созданием ссылок TextView пожалуйста, перепробовал много вариантов никакой не помогает, выходит ошибка java.lang.NullPointerException
пробовал эти варианты:
1) добавить слушателя
texttest.setOnClickListener(new View.OnClickListener() {
@Override public void onClick(View view) { Uri adress= Uri.parse("www.google.ru"); Intent browser= new Intent(Intent.ACTION_VIEW, adress); startActivity(browser); }
});
2)
TextView clickableTextLink = (TextView)findViewById(R.id.textView_About); clickableTextLink.setMovementMethod(LinkMovementMethod.getInstance());
3) Этот способ работает, но не получается создать ссылку вида
Google


Ответ

Сложный способ позволяющий не только сделать ссылки кликабельными, но и отловить нажатие на них:
Берём обычный TextView
Создаём класс для обработки нажатий на ссылки в тексте:
public class MakeLinksClicable { private final static String LOG = MakeLinksClicable.class.getSimpleName();
public static class CustomerTextClick extends ClickableSpan { String mUrl;
public CustomerTextClick(String url) { mUrl = url; }
@Override public void onClick(View widget) { //Тут можно как-то обработать нажатие на ссылку //Сейчас же мы просто открываем браузер с ней Log.i(LOG, "url clicked: " + this.mUrl);
Intent i = new Intent(Intent.ACTION_VIEW); i.setData(Uri.parse(mUrl)); widget.getContext().startActivity(i); } }
public static SpannableStringBuilder reformatText(CharSequence text) { int end = text.length(); Spannable sp = (Spannable) text; URLSpan[] urls = sp.getSpans(0, end, URLSpan.class); SpannableStringBuilder style = new SpannableStringBuilder(text); for (URLSpan url : urls) { style.removeSpan(url); MakeLinksClicable.CustomerTextClick click = new MakeLinksClicable.CustomerTextClick(url.getURL()); style.setSpan(click, sp.getSpanStart(url), sp.getSpanEnd(url), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); }
return style; } } Присваиваиваем TextView текст, указав ему, что он в HTML формате и кликабельный и ловим клики на ссылки с помощью класса из предыдущего пункта:
TextView textView = ... //находим TextView //Экранируем кавычки в атрибуте html тега слэшем: String textWithLink = "Google"; //Указываем с помощью Html.fromHtml, что у нас не просто текст: textView.setText(Html.fromHtml(textWithLink, null, null)); ////Указываем что разрешаем ссылки кликать: textView.setLinksClickable(true); textView.setMovementMethod(LinkMovementMethod.getInstance()); //Научаемся отлавливать клики пропустив текст через наш класс из пред. пункта. CharSequence text = textView.getText(); if (text instanceof Spannable) { textView.setText(MakeLinksClicable.reformatText(text)); }
Итого:
Ссылка в TextView окрасится дефолтным цветом выделения ссылок, а при нажатии на неё в логи выведется адрес и запустится браузер с этой ссылкой.
UPD_0:
Чтобы дополнить вопрос - нажмите "править" - см. скриншот.

Если заявленная в вопросе проблема решена - вопрос надо отметить верным, нажав на "галочку" слева от тела вопроса. Если в процессе решения родился новый вопрос - задавайте новый вопрос отдельным постом на сайте. Смысл сайта: один вопрос - один ответ.

Комментариев нет:

Отправить комментарий