Intereting Posts
Ionic 2: Как я могу получить консольные сообщения с устройства Android Почему AsyncTask моей службы блокирует AsyncTasks из основной активности? Загрузить изображение из нового приложения Google+ (плюс) Android: как сделать снимок экрана своего приложения программно Как читать / перехватывать сообщение USSD на Android-телефоне Как отключить все звуки и вибрацию через Android API Имитировать низкую пропускную способность в android PDFJet-Open-source: как установить многострочный текст внутри объекта Cell Эффект кнопки «Слайд-эффект» элемента «Просмотр списка» для Android Ошибка с данными JSON Android Недопустимый аргумент HttpClient Как получить индекс текста, выбранного в AutoCompleteTextView Signpost OAuth на Android: как воссоздать Потребителя между двумя успешными прогонами? Не удается запустить приложение при настройке Crashlytics – NoClassDefFoundError Удалите тень под TabLayout на Android Изменение размера элементов HTML при изменении ориентации Android

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()); }