带有 url 和文本的 AlertDialog

Gab*_*adu 5 android

我试图在 android 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();
Run Code Online (Sandbox Code Playgroud)

当单击对话框中的 SpannableString 文本时,它显示整个文本都是可单击的......并且仍然无法打开网页。当然,我不明白文档中的某些内容,但不明白是什么。你能帮忙吗?

Mat*_*hew 3

使用 Html.fromHtml(),您可以从给定的字符串接收已格式化的 HTML 文本。

应用于您的情况,这将导致“新链接” - 但警报对话框会忽略下面的“href”,因为它不显示 HTML。因此链接器对您的代码不执行任何操作。尝试将其注释掉 - 行为将保持不变。

使用链接器,您可以将任意文本模式(正则表达式)转换为可单击的链接。例如,您可以将与正则表达式匹配的字符串附加到预定义的“基本”内容 URI。因此它不仅适用于网站,也适用于 Android 上使用的每个内容 URI。有关更多信息,请参阅Google DevSite

您可以使用没有正则表达式的链接器,其中包含一些标准模式。这些是匹配的电子邮件地址、电话号码、地图坐标或网站。因此,为了使您的解决方案发挥作用:

  1. 将可跨越的字符串设置为普通 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();
Run Code Online (Sandbox Code Playgroud)