2011-06-20 31 views
2

試圖做一些相當簡單的事情。Linkify Android變換問題

這樣

用戶名以文本:這是我在做

它是在一個單一的TextView評論。我想讓用戶名稱成爲一個鏈接。我決定,最簡單的事情將是圍繞用戶名的東西,如「$ @」,使其成爲

「$ @用戶名:$ @這是一條評論我提出

這樣,我可以使用下面的正則表達式

Pattern userName = Pattern.compile(".*\\[email protected](.+)\\[email protected]*"); 

與Linkify並使其鏈接,但顯然我需要刪除分隔符,所以下面的代碼

title.setText(titleText); 
Linkify.TransformFilter transformer = new Linkify.TransformFilter() { 

    @Override 
    public String transformUrl(Matcher match, String url) { 
     return match.group(1); 
    } 
}; 
Linkify.addLinks(title, userName, "content://user=", null,  transformer); 

但是,由於某種原因,整個文本變成了一個巨大的鏈接,文本根本沒有被轉換。

回答

1

它實際上沒有被證明是相當容易的。我結束了不使用瘋狂的「$ @」來分隔的用戶名,而不是隻用

用戶名堅持:這是我在做

所以我最終使用下面的模式評論

Pattern userName = Pattern.compile("(.+:)"); 

很簡單,代碼變得只是

title.setText(titleText); 
Linkify.addLinks(title, GlobalUtil.userName, "user://" + userId + "/"); 

謝謝你的建議。我確實匹配整個字符串,而不僅僅是鏈接的userName。

0

我最好的猜測是你正在使用的正則表達式是一個問題,你告訴它基本上挑出整個字符串,如果它匹配,包括前後尋找的所有東西。所以,TransformFilter可能被傳遞了整個匹配的字符串。 transformUrl據我所知可以期望您返回URL,因此整個字符串鏈接到第一個匹配組。

因此,考慮到這一點,它可能在你最感興趣的正則表達式改爲沿"\\[email protected](.+?)\\[email protected]"東西線(與添加的?組中進行匹配非貪婪),以避免匹配整個字符串,只是挑出你想要的URL-ize(缺少更好的術語,再加上-ize的詞語聽起來很酷)。