2012-09-05 17 views
0

我試圖在單擊時啓動活動的文本字符串中生成可單擊的鏈接。我已經使用Linkify()來檢測我的文本中的鏈接。此功能可以添加文本鏈接,但只能添加網址。我需要將我的輸出轉換爲ClickableSpan,以便我可以實現this technique將SpannableString轉換爲ClickableSpan

如何讓Linkify()的已識別鏈接變爲指向活動的ClickableSpans?

下面是我的代碼已經在Linkify使用:

// Linkify parameters 
final static Pattern pattern = Pattern.compile("\\[[^]]*]"); // defines the fact that links are bound by [square brackets] 
final String scheme = "http://"; // TODO: Currently this is just a blank link 
Linkify.addLinks(linkText, pattern, scheme); 
+0

我做了類似這樣的事情:[格式化TextView看起來像鏈接](http://stackoverflow.com/q/11820526/1267661)。如果你將鏈接中的技術與我的'swapSpans()'方法結合起來,你應該可以做你想做的。 – Sam

回答

0

對於你想達到的目的,只需重寫Activity中的startActivity()方法並用文本中的URL攔截ACTION_VIEW意圖可能會更簡單。是這樣的:

public class MyActivity extends Activity { 

    @Override 
    public void startActivity(Intent intent) { 
     final String action = intent.getAction(); 
     if (action.equals(Intent.ACTION_VIEW)) { 
      // launch our other activity instead 
      Intent ourIntent = new Intent(this, MyOtherActivity.class); 
      ourIntent.setData(intent.getData()); 
      super.startActivity(ourIntent); 

      // we're done! 
      return; 
     } 

     // else, normal handling by the framework 
     super.startActivity(intent); 
    } 

    // the rest of your activity code 

} 

作爲參考,here's the source code for URLSpan將觸發上述startActivity()方法。

+0

我一直在尋找這個好幾天了,我根本無法解決你的建議......我應該把它作爲一個單獨的類,它從來沒有被調用,但是它等待一個URL被點擊? – CaptainProg

+0

據我所知,我需要把這段代碼放在我的程序的開始處,並等待一個URL被點擊。我的活動在啓動時會有一些變數。這些在我的程序開始時不可用於這段代碼......或者它們是? – CaptainProg

+0

上面的'startActivity()'方法覆蓋應該被添加到你的'Activity'類(顯示已被'Linkify()'處理的文本的類)。 – Joe

0

如何獲得Linkify()的標識的鏈接,成爲ClickableSpans其直接到活動?

您的來電addLinks()後,調用getText()來檢索TextViewSpanned對象。該對象將有一系列URLSpan對象,每個匹配的鏈接一個 - 您可以通過致電getSpans()來獲得這些對象的數組。您需要注意每個跨度開始和結束的位置(通過getSpanStart()getSpanEnd()),刪除URLSpan,然後將其替換爲您自己的跨度來執行所需操作。