2012-02-23 39 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();