Зробіть перегляд тексту гіперпосилання в android


80

Я хочу зробити посилання на текст текстового перегляду, такий як Google . Чи є спосіб зробити таке посилання. (тобто) При натисканні слова Google слід відкрити відповідне посилання. Будь-які ідеї вітаються.




1
просто використовуйте Linkify.addLinks (TextView, Linkify.ALL);
AndroidGeek

Відповіді:


135

Спробуйте це, і дайте мені знати, що сталося ..

Використання Java-коду:

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

Починаючи з рівня API> = 24 Html.fromHtml(String source), замість цього не використовуйте fromHtml(String, int),

textView.setText(Html.fromHtml(text, Html.FROM_HTML_MODE_COMPACT));

Або у файлі xml layout, всередині атрибутів віджета TextView

android:autoLink="web"
android:linksClickable="true"

я отримав очікуваний результат. Дякую за вашу відповідь
Srinivas

1
Якщо текст гіперпосилання присутній у strings.xml, тоді жодна із запропонованих відповідей не працює. Це працює дуже дивно. Якщо я встановлюю текст безпосередньо в макеті xml, він працює, але коли я встановлюю дані текстового перегляду в коді Java, це не працює.
Велю

2
Зазначимо лише, що якщо ви використовуєте код Java, вам потрібно видалити його android:autoLink="web"з XML. У мене були обидва, і це не спрацювало.
Αntonis Papadakis

53

використовувати android:autoLink="web"у xml вашого TextView. Він повинен автоматично перетворювати URL-адреси, що можуть натискати


14
Також включіть android: linksClickable = "true"
Ajith Memana

@waqaslam у цьому випадку, коли ми розміщуємо посилання.
Гарга

1
@ Garg's Текст, який ви встановили в текстовому перегляді, може містити гіперпосилання
waqaslam,

28

Всі перевірені та працюючі 100%
рішення: android:autoLink="web"
нижче наведено повний приклад

зразка макета Xml

    <TextView
        android:id="@+id/txtLostpassword"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:autoLink="email"
        android:gravity="center"
        android:padding="20px"
        android:text="@string/lostpassword"
        android:textAppearance="?android:attr/textAppearanceSmall" />

    <TextView
        android:id="@+id/txtLostpassword"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:autoLink="web"
        android:gravity="center"
        android:padding="20px"
        android:text="@string/defaultpassword"
        android:textAppearance="?android:attr/textAppearanceSmall" />

Рядок у string.xml

<string name="lostpassword">If you lost your password please contact <a href="mailto:support@cleverfinger.com.au?Subject=Lost%20Password" target="_top">support@cleverfinger.com.au</a></string>

<string name="defaultpassword">User Guide <a href="http://www.cleverfinger.com.au/user-guide/">http://www.cleverfinger.com.au/user-guide/</a></string>

3
Це не спрацює, якщо я змінив цей рядок> cleverfinger.com.au/user-guide/ </a> </ string > на інший текст, наприклад: Клацніть тут
Musculaa

2
це працює, лише якщо текст містить повну URL-адресу, наприклад: www.something.com
Рахул Тіварі


5

Примітка: - Html.fromHtml застарілий в Android N

Вам потрібно зробити перевірку та підтримку Android Nта новіші версії Android

                  //Set clickable true
                 tagHeading.setClickable(true);
                 
                  //Handlle click event
                  tagHeading.setMovementMethod(LinkMovementMethod.getInstance());

                if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.N) {
                    tagHeading.setText(Html.fromHtml("<a href='https://github.com/hiteshsahu'>https://github.com/hiteshsahu</a>", Html.FROM_HTML_MODE_LEGACY));
                } else {
                    tagHeading.setText(Html.fromHtml("<a href='https://github.com/hiteshsahu'>https://github.com/hiteshsahu</a>"));
                }
 

Як варіант

Ви можете не хотіти програмно додавати прапор автозв'язку в TextView.

android: autoLink = "web"

android: linksClickable = "true"

Таким чином Вам не потрібно додавати <a href='somelink'>теги.

Що є недоліком, якщо ви хочете додати hyperlinkна a, textви не можете зробити це таким чином. наприклад, ви не можете зробити щось подібне: - [ hiteshsahu ] [1]

           <TextView
                android:id="@+id/tag_info"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_below="@+id/tag_ll"
                android:layout_gravity="left"
                android:layout_margin="10dp"
                android:autoLink="web"
                android:linksClickable="true"
                android:text="https://github.com/hiteshsahu"
                android:textColor="@color/secondary_text" />

Результат обох підходів:

https://github.com/hiteshsahu


1

Для останньої версії SDK fromHtmlзастаріло Використовуйте під рядком

String yourtext = "<a style='text-decoration:underline' href='http://www.sample.com'> Sample Website </a>";
    if (Build.VERSION.SDK_INT >= 24) {
        textView.setText(Html.fromHtml(yourtext, Html.FROM_HTML_MODE_LEGACY));
    } else {
        textView.setText(Html.fromHtml(yourtext));
    }

0

Я зробив наступну функцію розширення текстового перегляду.

@SuppressLint("SetTextI18n")
fun TextView.makeHyperLink(url: String) {
    text = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
        Html.fromHtml("<a href='${url}'>${text}</a>", Html.FROM_HTML_MODE_COMPACT)
    } else {
        Html.fromHtml("<a href='${url}'>${text}</a>")
    }
    movementMethod = LinkMovementMethod.getInstance()
    isClickable = true
}

і називаючи це так

tvTos.makeHyperLink(tos_url)

Ви також можете передавати текст як параметр.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.