Сделать текстовое представление гиперссылки в android
80
Я хочу сделать ссылку для текста текстового просмотра, например Google . Есть ли способ сделать такую ссылку. (т.е.) При нажатии на слово Google должно открываться соответствующее сообщение. Любые идеи приветствуются.
я получил ожидаемый результат. Спасибо за твой ответ
Шринивас
1
Если текст гиперссылки присутствует в strings.xml, то ни один из предложенных ответов не работает. Это работает очень странно. Если я устанавливаю текст непосредственно в макете xml, он работает, но когда я устанавливаю данные textview в java-коде, он не работает.
Велю
2
Просто упомяну, что если вы используете код Java, вам нужно удалить его android:autoLink="web"из XML. У меня были оба, и это не сработало.
ntonis Papadakis
53
используйте android:autoLink="web"в своем TextView xml. Он должен автоматически преобразовывать URL-адреса, доступные при нажатии (если они находятся в тексте)
<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>
<stringname="defaultpassword">User Guide <ahref="http://www.cleverfinger.com.au/user-guide/">http://www.cleverfinger.com.au/user-guide/</a></string>
Вы можете не захотеть программно добавлять флаг autoLink в TextView.
android: autoLink = "Интернет"
android: linksClickable = "true"
Таким образом, вам не нужно добавлять <a href='somelink'>теги.
Что является недостатком, если вы хотите добавить hyperlinkна textвы не можете сделать это таким образом. например, вы не можете сделать что-то вроде этого: - [ hiteshsahu ] [1]
Ответы:
Попробуйте это и дайте мне знать, что происходит ...
Используя код 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-файле макета внутри атрибутов виджета TextView
android:autoLink="web" android:linksClickable="true"
источник
android:autoLink="web"
из XML. У меня были оба, и это не сработало.используйте
android:autoLink="web"
в своем TextView xml. Он должен автоматически преобразовывать URL-адреса, доступные при нажатии (если они находятся в тексте)источник
Все протестировано и работает 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>
источник
Это также можно сделать, используя свойство по умолчанию Textview.
android:autoLink="email"
источник
Примечание. - 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>")); }
Альтернативно
Вы можете не захотеть программно добавлять флаг autoLink в TextView.
Таким образом, вам не нужно добавлять
<a href='somelink'>
теги.Что является недостатком, если вы хотите добавить
hyperlink
на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
источник
Последняя версия 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)); }
источник
Я сделал следующую функцию расширения текстового представления.
@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)
Вы также можете передать текст в качестве параметра.
источник