Подтвердить что ты не робот

Android: установить ссылку с помощью <a href> в TextView

Я создаю TextView динамически и хочу установить текст как связываемый. Текстовое значение: "Google". Я сослался на интернет и в блогах это нравится, что показывает то же самое, но я не смог дать ожидаемых результатов.

Я пробовал по-разному, но вывод я вижу весь текст только с текстом. Код, с которым я пробовал:

TextView tv1 = new TextView(this);
tv1.setLayoutParams(textOutLayoutParams);
// Make Linkable
tv1.setMovementMethod(LinkMovementMethod.getInstance());
tv1.setText(Html.fromHtml(l.getLeftString()));

/*SpannableString s = new SpannableString(l.getLeftString());
Linkify.addLinks(s, Linkify.WEB_URLS);
tv1.setText(s);                 
tv1.setMovementMethod(LinkMovementMethod.getInstance());
*/
dialogLayout.addView(tv1);

В моем выводе я вижу "Google" и никакой ссылки. Я также попробовал Clean project & строить его снова, но безуспешно. Я вижу только "Google", подчеркнутый синим цветом (по умолчанию), и при нажатии Google браузер открывается с помощью http://google.com.

Чего не хватает в моем коде, чтобы получить вывод? Кстати, для REF: я использую 64-битную Win 7, Java, Eclipse, Android API 8-2.2

Любая помощь высоко ценится.

4b9b3361

Ответ 1

Наконец-то я заработал, используя следующий код:

TextView tv1 = new TextView(this);
tv1.setLayoutParams(textOutLayoutParams);
tv1.setText(Html.fromHtml("<a href=\""+ l.getRightString() + "\">" + l.getLeftString() + "</a>"));
tv1.setClickable(true);
tv1.setMovementMethod (LinkMovementMethod.getInstance());
dialogLayout.addView(tv1);

l.getRightString() - содержит URL-адрес, например http:\www.google.com l.getLeftString() - содержит текст для URL-адреса, например "Перейти в Google"

РЕЗУЛЬТАТЫ : Текст "Перейти к Google" в моем диалоговом окне выделен синим цветом и подчеркнут, и при нажатии на него открывается браузер и отображается соответствующая страница. При возврате/выходе из браузера оно снова приходит в приложение из того состояния, в котором оно было оставлено.

Надеюсь это поможет.

Ответ 2

Сохраните HTML в строке

<string name="link">&lt;a href="http://www.google.com">Google&lt;/a></string>

Установите для идентификатора textview значение

textViewLinkable

В основной деятельности используйте следующий код:

((TextView) findViewById(R.id.textViewLinkable)).setMovementMethod(LinkMovementMethod.getInstance());
((TextView) findViewById(R.id.textViewLinkable)).setText(Html.fromHtml(getResources().getString(R.string.link)));

Ответ 3

Вот моя простая реализация, проверенная до Android N.

String termsText = "By registering, you are agree to our";
String termsLink = " <a href=https://www.yourdomain.com/terms-conditions.html >Terms of Service</a>";
String privacyLink = " and our <a href=https://www.yourdomain.com/privacy-policy.html >Privacy Policy</a>";
String allText = termsText + termsLink + privacyLink;

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
    ((TextView) findViewById(R.id.text_terms_conditions)).setMovementMethod(LinkMovementMethod.getInstance());
    ((TextView) findViewById(R.id.text_terms_conditions)).setText(Html.fromHtml(allText, Html.FROM_HTML_MODE_LEGACY));
} 
else {
    ((TextView) findViewById(R.id.text_terms_conditions)).setMovementMethod(LinkMovementMethod.getInstance());
    ((TextView) findViewById(R.id.text_terms_conditions)).setText(Html.fromHtml(allText));
}

Ответ 4

Я также столкнулся с той же проблемой, которую решил, используя следующую

String str_text = "<a href=http://www.google.com >Google</a>";
TextView link;
link = (TextView) findViewById(R.id.link);
link.setMovementMethod(LinkMovementMethod.getInstance());
link.setText(Html.fromHtml(str_text));

для изменения цвета ссылки на синий используйте

link.setLinkTextColor(Color.BLUE);

Ответ 5

txtview.setMovementMethod(LinkMovementMethod.getInstance());

Передайте этот оператор в текстовое представление и в string.xml установите строку как

<string name="txtCredits"> <a href="http://www.google.com"></a></string>

Теперь передайте это имя строки "android: text =" @string/txtCredits "вашему классу xml, где находится txtview.

Ответ 6

используйте этот код autolink-java на GitHub

как это

private String getLink(String string){

    LinkExtractor linkExtractor = LinkExtractor.builder()
            .linkTypes(EnumSet.of(LinkType.URL)) // limit to URLs
            .build();
    Iterable<Span> spans = linkExtractor.extractSpans(string);

    StringBuilder sb = new StringBuilder();
    for (Span span : spans) {
        String text = string.substring(span.getBeginIndex(), span.getEndIndex());
        if (span instanceof LinkSpan) {
            // span is a URL
            sb.append("<a href=\"");
            sb.append(text);
            sb.append("\">");
            sb.append(text);
            sb.append("</a>");
        } else {
            // span is plain text before/after link
            sb.append(text);
        }
    }

    return sb.toString();  // "wow <a href=\"http://test.com\">http://test.com</a> such linked"
}