带有网址和文字的AlertDialog

时间:2012-02-23 22:54:27

标签: 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();

单击对话框中的SpannableString文本时,它会显示整个文本是可点击的...但仍然无法打开网页。我肯定不会从文档中理解一些东西,但是看不出来。你能帮忙吗?

1 个答案:

答案 0 :(得分:3)

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

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

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

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

  1. 将spannable String设置为普通URL(无HTML内容)
  2. 只需为“WEB_URLS”类型添加链接(Linkify.WEB_URLS)(Linkify.ALL将“搜索”所有预定义模式,如上所述)
  3. 它会起作用。

    我调整了您的代码,现在在AlertWindow中,网址“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();