Как создать ссылки в текстовом клиенте?

У меня есть следующий TextView:

 

где @string/txtCredits – это строковый ресурс, содержащий Link text .

Android выделяет ссылки в TextView, но они не реагируют на клики. Может ли кто-нибудь сказать мне, что я делаю неправильно? Должен ли я устанавливать onClickListener для TextView в своей деятельности для чего-то простого?

Похоже, это связано с тем, как я определяю свой строковый ресурс. Это не работает:

 Google 

Но это делает:

 www.google.com 

Это облом, потому что я бы скорее показал текстовую ссылку, чем полный URL.

Похороненный в демонстрациях API, я нашел решение своей проблемы:

Link.java:

  // text2 has links specified by putting  tags in the string // resource. By default these links will appear but not // respond to user input. To make them active, you need to // call setMovementMethod() on the TextView object. TextView t2 = (TextView) findViewById(R.id.text2); t2.setMovementMethod(LinkMovementMethod.getInstance()); 

Я удалил большинство атрибутов в своем TextView, чтобы соответствовать тому, что было в демо.

  

Это решило. Довольно трудно раскрыть и исправить.

Важно : Не забудьте удалить autoLink="web" если вы вызываете setMovementMethod() .

Я использую только android:autoLink="web" и он отлично работает. Щелчок по ссылке открывает браузер и показывает правильную страницу.

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

Проведя некоторое время с этим, я обнаружил, что:

  • android:autoLink="web" работает, если у вас есть полные ссылки в вашем HTML. Следующее будет выделено синим цветом и можно щелкнуть мышью:
  • Некоторый текст http://www.google.com
  • Некоторые тексты http://www.google.com
  • view.setMovementMethod(LinkMovementMethod.getInstance()); будет работать со следующими (будет выделено и доступно для кликов):

Обратите внимание, что третий вариант имеет гиперссылку, но описание ссылки (сама часть между тегами) не является ссылкой. android:autoLink="web" НЕ работает с такими ссылками.

  • android:autoLink="web" если задано в XML, будет переопределять view.setMovementMethod(LinkMovementMethod.getInstance()); (т. е. ссылки третьего рода будут выделены, но не будут доступны).

view.setMovementMethod(LinkMovementMethod.getInstance()); рассказа является использование view.setMovementMethod(LinkMovementMethod.getInstance()); в вашем коде и убедитесь, что у вас нет android:autoLink="web" в вашем XML-макете, если вы хотите, чтобы все ссылки были android:autoLink="web" .

Вышеупомянутые решения не сработали для меня, но следующее (и кажется немного чище).
Во-первых, в строковом ресурсе определите свой шедевр открытия тегов, используя кодировку объекта HTML, то есть:

 <a href="http://www.google.com">Google</a> 

и не:

 Google 

В общем, кодируйте все шевроны в такой строке. BTW, ссылка должна начинаться с http://

Затем (как предлагается здесь ) установите этот параметр в TextView:

  android:linksClickable="true" 

Наконец, в коде выполните:

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

Вот и все, никаких регулярных выражений или других ручных хаков.

я использовал это просто

 Linkify.addLinks(TextView, Linkify.ALL); 

делает ссылки кликабельными приведенными здесь

Если вы хотите добавить ссылку на HTML-код, все, что вам нужно сделать, это:

  • добавить ресурс HTML-подобной строки:

      Google 
  • добавьте свой вид в макет с отсутствием конфигурации, специфичной для конкретной ссылки:

      ` 
  • добавьте соответствующий MovementMethod программно в TextView:

      mLink = (TextView) findViewById(R.id.link); if (mLink != null) { mLink.setMovementMethod(LinkMovementMethod.getInstance()); } 

Это оно! И да, наличие таких параметров, как «autoLink» и «linksClickable», работающие только с явными ссылками (не обернутые в tags html), слишком вводят меня в заблуждение …

Я добавил эту строку в TextView : android:autoLink="web"
Ниже приведен пример использования в файле макета.

layout.xml

    

string.xml

 If you lost your password please contact [email protected] User Guide http://www.cleverfinger.com.au/user-guide/ 

Я надеюсь, что это поможет вам;

 String value = "Visit my blog mysite View myactivity callback"; TextView text = (TextView) findViewById(R.id.text); text.setText(Html.fromHtml(value)); text.setMovementMethod(LinkMovementMethod.getInstance()); 

Только то, что вам нужно добавить в текстовое представление в xml

  

Ричард, в следующий раз вы должны добавить этот код в TextView вместо XML.

 android:autoLink="all" 

Это должно быть так.

   

Вам не нужно использовать этот код ( t2.setMovementMethod(LinkMovementMethod.getInstance()); ), чтобы сделать ссылку доступной.

Кроме того, вот правда: до тех пор, пока вы устанавливаете autoLink и linksClickable , не забудьте добавить это в файл String.xml, чтобы ссылка на клики работала.

 Google 

используя linkify : Linkify возьмите кусок текста и регулярное выражение и превратите все совпадения регулярных выражений в текст в интерактивные ссылки

 TextView textView = (TextView) findViewById(R.id.textView); textView.setText("http://www.domain.com"); Linkify.addLinks(textView, Linkify.WEB_URLS); 

Не забывайте

 import android.widget.TextView; 

Самое легкое, что сработало для меня, – использовать Linkify

 TextView txt_Message = (TextView) view.findViewById(R.id.txt_message); txt_Message.setText("This is link https://www.google.co.in/"); Linkify.addLinks(txt_Message, Linkify.WEB_URLS); 

и он автоматически обнаружит URL-адреса веб-сайта в текстовом виде.

Я заметил, что использование android:autoLink="web" таким образом

  

работал нормально для URL-адресов, но поскольку у меня был адрес электронной почты и номер телефона, который я хотел бы также связать, я в конечном итоге использовал эту строку android:autoLink="all" как это

  

и это работало как шарм.

Здесь очень один код android для того, чтобы сделать телефон и url выбранными из textView независимо от того, что является строкой и каковы данные. Для этого вам не нужно использовать HTML-tags.

 TextView textView = (TextView)findViewById(R.id.textView1); textView.setText("some url is www.google.com phone 7504567890 another url lkgndflg.com "); // Makes the textView's Phone and URL (hyperlink) select and go. Linkify.addLinks(textView, Linkify.WEB_URLS | Linkify.PHONE_NUMBERS); 

Обязательно не используйте setAutoLinkMask(Linkify.ALL) при использовании setMovementMethod(LinkMovementMethod.getInstance()) и Html.fromHTML() для правильно отформатированных HTML ссылок (например, Google ).

Использовать это…

 TextView.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub Intent in=new Intent(Intent.ACTION_VIEW,Uri.parse("http://www.twitter.com/")); startActivity(in); } }); 

и добавить разрешение в файл манифеста

  

Вам нужно только это:

 android:autoLink="web" 

Вставьте эту строку в TextView, которую можно кликать по ссылке в Интернете. URL-адрес, заданный как текст этого TextView.

Пример:

   

Принятый ответ правильный, НО это будет означать, что номера телефонов, карты, адреса электронной почты и регулярные ссылки, например http://google.com без тэгов href, НЕ ДОЛЖНЫ быть кликабельными, поскольку вы не можете иметь автолинк в xml.

Единственное полное решение для ВСЕХ щелчков, которые я нашел, это следующее:

 Spanned text = Html.fromHtml(myString); URLSpan[] currentSpans = text.getSpans(0, text.length(), URLSpan.class); SpannableString buffer = new SpannableString(text); Linkify.addLinks(buffer, Linkify.ALL); for (URLSpan span : currentSpans) { int end = text.getSpanEnd(span); int start = text.getSpanStart(span); buffer.setSpan(span, start, end, 0); } textView.setText(buffer); textView.setMovementMethod(LinkMovementMethod.getInstance()); 

И TextView НЕ должен иметь android:autolink . android:linksClickable="true" не нужен android:linksClickable="true" ; это по умолчанию.

Следующее должно работать для всех, кто ищет комбинацию текста и гиперссылки в приложении для Android.

В string.xml :

 Looking for the regular Zesteve App? Get it here  

Теперь вы можете использовать эту string в любом представлении View следующим образом:

  

Теперь, в вашей деятельности или fragmentе, сделайте следующее:

 TextView getapp =(TextView) findViewById(R.id.getapp); getapp.setMovementMethod(LinkMovementMethod.getInstance()); 

К настоящему моменту вам не нужно устанавливать android:autoLink="web" или android:linksClickable="true" используя этот подход.

Надеюсь, вы найдете это полезным.

Именно так я решил использовать интерактивные и видимые ссылки в TextView (по коду)

 private void setAsLink(TextView view, String url){ Pattern pattern = Pattern.compile(url); Linkify.addLinks(view, pattern, "http://"); view.setText(Html.fromHtml("http://"+url+"")); } 

Используйте нижеприведенный код:

 String html = "Your Domain Name" TextView textview = (TextView) findViewById(R.id.your_textview_id); textview.setMovementMethod(LinkMovementMethod.getInstance()); textview.setText(Html.fromHtml(html)); 

Причина, по которой у вас возникла проблема, заключается в том, что она только пытается сопоставить «голые» адреса. таких как «www.google.com» или « http://www.google.com ».

Запуск вашего текста через Html.fromHtml () должен сделать трюк. Вы должны делать это программно, но это работает.

Телефон Autolink не работает для меня. Следующее работало как шарм,

 TextView tv = (TextView) findViewById(R.id.emergencynos); String html2="

Fire - 997 "; tv.append(Html.fromHtml(html2)); tv.setMovementMethod(LinkMovementMethod.getInstance());

Добавьте CDATA в свой текстовый ресурс

strings.xml

 Google]]> 

Не знаю, стоит ли добавить еще один ответ, но на всякий случай …

Я должен был выследить это в нескольких местах, но, наконец, получил эту версию кода для работы.

strings.xml:

 <a href="http://www.google.com">link text1</a> <a href="http://www.google.com">link text2</a> 

myactivity.xml:

   

myactivty.java (in onCreate ()):

 TextView tv1 = (TextView)findViewById(R.id.textview1); TextView tv2 = (TextView)findViewById(R.id.textview2); tv1.setText(Html.fromHtml(getResources().getString(R.string.name1))); tv2.setText(Html.fromHtml(getResources().getString(R.string.name2))); tv1.setMovementMethod(LinkMovementMethod.getInstance()); tv2.setMovementMethod(LinkMovementMethod.getInstance()); 

Это создаст две интерактивные гиперссылки с текстовой link text1 и link text2 которые перенаправляют пользователя на Google.

Если вы используете XML TextView для вашего требования, вам нужно сделать всего две вещи:

  1. Определите свою ссылку в строке, например «это мой веб-сайт». Вы можете добавить его в xml или в код.

  2. В xml, который имеет TextView, добавьте следующее:

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

Я использую автолинк для «авто подчеркивания» текста, но просто сделал «onClick», который управляет им. (Я сам столкнулся с этой проблемой)

   public void twitter (View view) { try { Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://twitter.com/onaclovtech")); startActivity(browserIntent); } finally { } } 

Не требует никаких разрешений, поскольку вы передаете намерение приложениям, которые управляют этими ресурсами (браузер IE).

Это и помогло мне. Удачи.

Просто потратил столько времени, чтобы понять, что вам нужно использовать getText (R.string.whatever) вместо getString (R.string.whatever) …

В любом случае, вот как я получил свою работу. С несколькими гиперссылками в том же текстовом представлении тоже.

  TextView termsTextView = (TextView) getActivity().findViewById(R.id.termsTextView); termsTextView.append("By registering your account, you agree to our "); termsTextView.append(getText(R.string.terms_of_service)); termsTextView.append(", "); termsTextView.append(getText(R.string.fees)); termsTextView.append(", and the "); termsTextView.append(getText(R.string.stripe_connected_account_agreement)); termsTextView.setMovementMethod(LinkMovementMethod.getInstance());  

пример строки

  Stripe Connected Account Agreement 

Мой код был таким:

  

Мой код Java был следующим:

 /*TextView action*/ TextView textView = (TextView) findViewById(R.id.link); textView.setMovementMethod(LinkMovementMethod.getInstance()); textView.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { startActivity(new Intent(LoginActivity.this,forgot.class)); } }); 

Это просто указывает на ссылку на другую деятельность. Но эта ссылка доступна клиенту и работает плавно. Протестировано в Android Studio 1.5 (Preview)

[Tested in Pre-lollipop as well as in Lollipop and above]

Вы можете получить свою строку HTML из бэкэнд или из ваших файлов ресурсов. Если вы поместите свой текст в строку ресурса, обязательно добавьте тег CDATA :

 ![CDATA[...Link Title ...]] 

Затем в коде вам нужно получить строку и назначить ее как HTML и установить способ перемещения ссылок:

 String yourText = getString(R.string.your_text); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { textView.setText(Html.fromHtml(yourText, Html.FROM_HTML_MODE_COMPACT)); } else { textView.setText(Html.fromHtml(yourText)); } try { subtext.setMovementMethod(LinkMovementMethod.getInstance()); } catch (Exception e) { //This code seems to crash in some Samsung devices. //You can handle this edge case base on your needs. } 
  • jQuery отключить ссылку
  • Как ссылаться на метод в javadoc?
  • Как создать прямую ссылку на любую коробку fancybox
  • Scrapy: Следуйте ссылке, чтобы получить дополнительные данные элемента?
  • Как сделать кнопку похожим на ссылку?
  • Как добавить гиперссылку в JLabel
  • Изменить цвет текста в тексте TextView и щелкнуть?
  • C # regex pattern для извлечения URL-адресов из заданной строки - не полный URL-адрес html, но также и ссылки
  • Interesting Posts

    django – почему объект request.POST неизменяем?

    Как выбрать текст, затем конвертировать с тегом html?

    EF4 Code First: как добавить отношения без добавления свойства навигации

    Какой самый быстрый алгоритм сортировки связанного списка?

    Легкая альтернатива Hibernate?

    Использование библиотеки aar приводит к отсутствию зависимостей с помощью api в Gradle 4.x

    Является ли широкий литерал буква символов, начинающийся с L, как L «Hello World», гарантированный для кодирования в Unicode?

    Угловая js init ng-model от значений по умолчанию

    Ajax update / render не работает на компоненте, который имеет атрибут render

    Как добавить целый фрейм данных в CSV в R

    Поверните текст ярлыка в морском футляре

    Программное обеспечение подавления помех в реальном времени и эхоподавления для Windows 7

    как отключить кнопку дома в Android?

    В чем разница между многоядерной системой proc и multiproc?

    Как избежать тупика mysql, обнаруженного при попытке получить блокировку; попробуйте перезапустить транзакцию “

    Давайте будем гением компьютера.