2012-02-23 84 views
4

我想在android AlertDialog中显示一些文本和一些可点击的单词以打开网页。我做的事情错了,因为它不会打开我告诉他和孔文本链接点击,而我试图避免.... 这是我的代码: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文本中,它显示整个文本是可点击的......并且仍然不打开网页。当然,我不明白从文档中的东西,但没有看到什么。你能帮忙吗?

回答

3

使用Html.fromHtml(),您会收到给定字符串中已格式化的HTML文本。

适用于您的情况,这将导致一个“新链接” - 但警报对话框会忽略下面的“href”,因为它不显示HTML。所以链接器对你的代码不做任何事情。尝试评论 - 行为将保持不变。

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

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

  1. 将spannable字符串到一个正常的URL(无HTML的东西)
  2. 只需添加链接的类型“WEB_URLS”(Linkify.WEB_URLS)(Linkify.ALL会“搜索”所有预定义的模式,如上所述)

它会工作。

我调整你的代码,目前在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();