Гиперссылка в Android
У меня есть вопрос: как разместить гиперссылку WITHIN в текстовом блоке обычного текста? У меня есть текст, и в тексте я упоминаю URL-адрес, и я хочу, чтобы этот URL был другого цвета, подчеркивался и нажал кнопку.
Я знаю, что гиперссылки в андроиде можно разместить с помощью "Linkify".
и я назвал android docs page
Рассмотрим тот же абзац выше, что и "андроидные документы", которые я хочу отобразить в android.....
Ответы
Ответ 1
@Fedor....
я нашел ссылку из API Demos.
этот подход, наконец, используется для предоставления ссылки между текстом параграфа.
SpannableString ss = new SpannableString("text4: Click here
to dial the phone.");
ss.setSpan(new StyleSpan(Typeface.ITALIC), 0, 6,
Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
ss.setSpan(new URLSpan("tel:4155551212"), 13, 17,
Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
TextView t4 = (TextView) findViewById(R.id.TextView01);
t4.setText(ss);
t4.setMovementMethod(LinkMovementMethod.getInstance());
Ответ 2
@PM - Я думаю, что вы ищете пользовательскую ссылку для Android, я надеюсь, что это поможет вам получить то, что вы хотите http://android-geek.blogspot.com/2011/04/linkify-text-in-android.html
Ответ 3
Посмотрите на текстовый номер и гиперссылку TextView
Но я вижу, что Linkify не предоставляет вам необходимую функциональность. Не проблема, вы можете реализовать его вручную. Просто добавьте ClickableSpans и нажмите ручку. Пример кода здесь http://www.orangeapple.org/?p=354.
Ответ 4
Я знаю, что это старый вопрос, но это проблема, с которой я недавно сталкивался, и я не нашел ответа StackOverflow, который мне помог. Поэтому после обширных экспериментов я нашел решение и подумал, что поделюсь им потомком.
В вашем файле strings.xml используйте теги HTML и маркеры:
<string name="example"><![CDATA[I know hyperlinks in android can be placed with "Linkify".. and i have referred <a href="http://developer.android.com/reference/android/text/util/Linkify.html">android docs</a> page]]></string>
В вашем XML убедитесь, что НЕ добавлены какие-либо специальные атрибуты. НЕ используйте android: autolink
В вашем коде Java вы должны использовать fromHtml, Linkify и LinkMovementMethod. Обязательно вызовите Linkify до LinkMovementMethod
exampleTextView.setText(Html.fromHtml(getString(R.string.example)));
Linkify.addLinks(exampleTextView, Linkify.WEB_URLS);
exampleTextView.setMovementMethod(LinkMovementMethod.getInstance());
Еще одно предостережение: если вы используете эти ссылки HTML, где ссылка имеет текст отображения, который не соответствует URL (Google и www.google.com), НЕ помещайте необработанные URL-адреса в строку. Итак:
<string name="example"><![CDATA[www.google.com I know hyperlinks in android can be placed with "Linkify".. and i have referred <a href="http://developer.android.com/reference/android/text/util/Linkify.html">android docs</a> page]]></string>
Поверните "www.google.com" в ссылку, но не включите "андроидные документы" в ссылку.
Мне было очень сложно разобраться, поскольку я пробовал много разных комбинаций и следил за множеством онлайн-примеров, ни одна из которых не работала, пока я не нашел только правильную комбинацию магии, описанную выше. Надеюсь, это поможет кому-то еще!
Ответ 5
Использовать Spannable String
private void setTermsAndTextToClickable(TextView tandcTextView, String termsAndCon, String wordTohyperLink, String termsAndConUrl){
if (TextUtils.isEmpty(termsAndCon)){
tandcTextView.setVisibility(View.GONE);
return;
}
if (!TextUtils.isEmpty(termsAndCon) && !TextUtils.isEmpty(wordTohyperLink) && !TextUtils.isEmpty(termsAndConUrl)){
SpannableString ssString = new SpannableString(termsAndCon);
int startLoc = termsAndCon.indexOf(wordTohyperLink);
int endLoc = termsAndCon.indexOf(wordTohyperLink) + wordTohyperLink.length();
ssString.setSpan(new URLSpan(termsAndConUrl),startLoc,endLoc, 0);
tandcTextView.setText(ssString);
tandcTextView.setMovementMethod(LinkMovementMethod.getInstance());
ClickableSpan clickableSpan = new ClickableSpan() {
@Override
public void onClick(View widget) {
// We display a Toast. You could do anything you want here.
Toast.makeText(MainActivity.this, "Clicked", Toast.LENGTH_SHORT).show();
}
};
ssString.setSpan(clickableSpan, startLoc, endLoc, 0);
}else{
tandcTextView.setText(termsAndCon);
}
}