помогите с созданием ссылок 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:
Чтобы дополнить вопрос - нажмите "править" - см. скриншот.
Если заявленная в вопросе проблема решена - вопрос надо отметить верным, нажав на "галочку" слева от тела вопроса.
Если в процессе решения родился новый вопрос - задавайте новый вопрос отдельным постом на сайте. Смысл сайта: один вопрос - один ответ.
Комментариев нет:
Отправить комментарий