Android: добавьте «внутренние» ссылки в часть TextView, которая ссылается на действие в моем коде

Как поясняется в заголовке, я хотел бы добавить ссылки на мой TextView с этими двумя оговорками:

До сих пор мне удалось превратить телефонные номера, адреса, веб-сайты и электронные письма в выделенные внешние ссылки, используя:

 Linkify.addLinks(message, Linkify.ALL); 

Мне бы хотелось что-то подобное для внутренних ссылок (к моему методу), с возможностью определения пользовательских.

Кроме того, использование веб-страницы с внутренней ссылкой и веб-представлением на самом деле не является вариантом, так как у меня уже есть несколько сложных макетов, и мне нужно изменить все приложение и концепции, это будет больно …

Есть идеи?

EDIT: Кабуко дал мне очень хорошее решение, вот как я его реализовал:

 final TextView descriptionTextView = (TextView) findViewById(R.id.description); final Spannable span = Spannable.Factory.getInstance().newSpannable("the full text for the view"); span.setSpan(new ClickableSpan() { @Override public void onClick(View widget) { Toast.makeText(StartEventActivity.this, "LINK CLICKED", Toast.LENGTH_SHORT).show(); } }, 1, 20, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); // 1 and 20 to be replaced with actual index of start and end of the desired link descriptionTextView.setText(span); descriptionTextView.setMovementMethod(LinkMovementMethod.getInstance()); 

Если вы действительно хотите перейти на URL-адреса, вы можете использовать Html.fromHtml , но если вы хотите, чтобы ваши собственные обработчики кликов вы могли использовать ClickableSpan .

По завершении предыдущей публикации это может помочь кому-то

  TextView textView = (TextView) getView().findViewById(R.id.textView); textView.setText(Html.fromHtml(getString(R.string.html_)) , TextView.BufferType.SPANNABLE); String tmp = ((Spannable) textView.getText()).toString(); String linkText = getString(R.string.html_link); int index = tmp.indexOf(linkText); if(index>=0) { Spannable spannable = (Spannable) textView.getText() ; spannable.setSpan(new ClickableSpan() { @Override public void onClick(View widget) { try { /// do what you must }catch (Exception ex){ handleException(ex); } } }, index, index+getString(R.string.html_link).length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); textView.setText(spannable); textView.setMovementMethod(LinkMovementMethod.getInstance()); }