Гиперссылка в Android - PullRequest
14 голосов
/ 08 июля 2010

У меня вопрос: как разместить гиперссылку внутри текстового блока обычного текста?У меня есть какой-то текст, и в тексте я упоминаю URL, и я хочу, чтобы этот URL был другого цвета, подчеркнут и доступен для кликов.

Я знаю, что гиперссылки в Android можно размещать с помощью «Linkify» ..и я сослался на документы для Android страницы

Рассмотрим тот же абзац выше с "документами для Android", которые я хочу отобразить в Android .....

Ответы [ 4 ]

14 голосов
/ 09 июля 2010

@ Федор .... я обнаружил, что даю ссылки из 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());
1 голос
/ 08 июля 2010

Взгляните на этот TextView подчеркивающий номер телефона и гиперссылку

Но я вижу, что Linkify не предоставляет вам необходимую функциональность.Не проблема, вы можете реализовать это вручную.Просто добавьте ClickableSpans и handlre click.Пример кода здесь http://www.orangeapple.org/?p=354.

0 голосов
/ 11 августа 2017

Использовать 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);
    }

}
0 голосов
/ 20 апреля 2016

Я знаю, что это старый вопрос, но это проблема, с которой я недавно боролся, и я не нашел ответа 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 убедитесь, что НЕ добавляете никаких специальных атрибутов. НЕ используйте андроид: 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" в ссылку, но не превратит "документы для Android" в ссылку.

Мне было очень сложно разобраться, так как я пробовал много разных комбинаций и следовал множеству онлайн-примеров, ни один из которых не работал, пока я не нашел правильную магическую комбинацию, описанную выше. Надеюсь, это поможет кому-то еще!

...