2016-09-23 1 views
1

Я woduld хотел сделать все ссылки в текстовом режиме кликабельными.Как сделать все 3 типа ссылок в текстовом виде

Пример текста:

"All three should link out http://google.com and <a href="http://google.com">here link</a> and <a href="http://google.com">http://google.com</a>" 

Если я использую MovementMethod с HTML текст, только второй и третий ссылка кликабельна. Если я использую Linkify (или смешаю оба), то только первая и вторая ссылки можно щелкнуть.

Как я могу сделать их доступными для всех?

ответ

0

После invesigation я обнаружил, что метод Linkify.addLinks() удалить текущие пролеты из текста и применить новую один раз (на основе, например, веб-странице URL). Из-за этого мои пробелы из Html.fromHtml() были удалены в начале и никогда не были снова использованы.

Итак, я сделал следующее:
1. Прочтите текст из htmml Html.fromHtml, который дает мне Spanned obj с html spans.
2. Сохранить простирается от HTML в массиве
3. Сделать linkify.addLinks - это метод удаления мои старые пролеты, поэтому я должен добавить его обратно
4. Добавьте старые пролетами
5. Установите текст в TextView.

Реализация:

private void setLabel(){  
    label.setText(linkifyHTML(Html.fromHtml("text with links here")); 
    label.setMovementMethod(LinkMovementMethod.getInstance()); 
    label.setLinkTextColor(getRes().getColor(R.color.link)); 
} 
    private Spannable linkifyHTML(CharSequence text) { 
     Spannable s = new SpannableString(text); 

     URLSpan[] old = s.getSpans(0, s.length(), URLSpan.class); 
     LinkSpec oldLinks[] = new LinkSpec[old.length]; 

     for (int i = 0; i < old.length; i++) { 
      oldLinks[i] = new LinkSpec(old[i], s.getSpanStart(old[i]), s.getSpanEnd(old[i])); 
     } 

     Linkify.addLinks(s, Linkify.ALL); 
     for (LinkSpec span : oldLinks) { 
      s.setSpan(span.span, span.start, span.end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); 
     } 
     return s; 
    } 

    class LinkSpec { 
     final URLSpan span; 
     final int start, end; 

     public LinkSpec(URLSpan urlSpan, int spanStart, int spanEnd) { 
      span = urlSpan; 
      start = spanStart; 
      end = spanEnd; 
     } 
    } 
0

Вы должны использовать обратную косую черту \ для обозначения знака ", чтобы строка не считала его конечной точкой строки. Я имею в виду, что строка считается, когда весь текст находится внутри двух "". Вы должны scape символов в вашем URL-адресе, потому что если не строка будет считать, что она должна закончиться, когда он найдет новый символ ", в этом случае в вашем URL-адресе.

"All three should link out http://google.com and <a href=\"http://google.com\">here link</a> and <a href=\"http://google.com\">http://google.com</a>" 
Смежные вопросы