AlertDialog с URL-адресами и текстом

Я пытаюсь показать в андроиде AlertDialog текст и несколько слов, которые можно щелкнуть, открывая веб-страницу. Я делаю что-то не так с этим, потому что он не открывает ссылку, которую я ему говорю, и текст дыры можно щелкнуть, и я стараюсь избегать …. Это мой код:

final SpannableString s = new SpannableString( Html.fromHtml("<br><a href=\"http://google.com\">a new link</a>") ); final TextView tx1 = new TextView(this); tx1.setText(getString(R.string.librarytextpart1) + s + getString(R.string.librarytextpart2)); tx1.setAutoLinkMask(RESULT_OK); tx1.setMovementMethod(LinkMovementMethod.getInstance()); Linkify.addLinks(s, Linkify.ALL); AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setTitle(getString(R.string.library)) .setCancelable(false) .setPositiveButton("OK", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { } }) .setView(tx1).show(); 

При нажатии на текст SpannableString в диалоговом окне он показывает, что весь текст можно щелкнуть … и по-прежнему не открывает веб-страницу. Конечно, я ничего не понимаю из документации, но не понимаю, что. Вы можете помочь, пожалуйста?

С помощью Html.fromHtml () вы получаете уже отформатированный HTML-текст из данной строки.

Применительно к вашему случаю это приведет к «новой ссылке», но нижеуказанный «href» игнорируется диалогом предупреждений, поскольку он не отображает HTML. Поэтому компоновщик ничего не делает на вашем коде. Попробуйте прокомментировать это – поведение будет оставаться прежним.

С помощью Linkifier вы можете превратить произвольные шаблоны текста (RegExes) в интерактивные ссылки. Вы можете добавить, например, строку, соответствующую вашему регулярному выражению, в предопределенный «базовый» URI контента. Таким образом, он работает не только для веб-сайтов, но и для каждого URI контента, используемого на Android. Для получения дополнительной информации обратитесь к Google DevSite .

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

  1. Установите spannable String на обычный URL (без HTML-материала)
  2. Просто добавьте ссылки для типа «WEB_URLS» (Linkify.WEB_URLS) (Linkify.ALL будет «искать» для всех предопределенных шаблонов, как указано выше)

И это сработает.

Я скорректировал ваш код, теперь в AlertWindow, URL-адрес «www.google.com» должен быть доступен кликабельному:

 final SpannableString s = new SpannableString("www.google.com"); final TextView tx1 = new TextView(this); tx1.setText(getString(R.string.librarytextpart1) + s + getString(R.string.librarytextpart2)); tx1.setAutoLinkMask(RESULT_OK); tx1.setMovementMethod(LinkMovementMethod.getInstance()); Linkify.addLinks(s, Linkify.WEB_URLS); AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setTitle(getString(R.string.library)) .setCancelable(false) .setPositiveButton("OK", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { } }) .setView(tx1).show();