TextView中實現可點擊連接的顯示

 開發的過程當中會有這麼一個需求:在一段話中包含有若干個連接,程序能識別出連接並突出顯示,不能有下劃線,用指定顏色,點擊後打開webview並跳轉到該網頁java

  主要包括如下幾個內容:web

  一、識別連接url,用正則表達式作。正則表達式

  二、突出顯示,繼承重寫ClickableSpanmarkdown

  三、跳轉需重寫ClickableSpan裏面的onClick事件ide

ClickableSpan重寫以下:this

class NoLineClickSpan extends ClickableSpan {
        String text;

        public NoLineClickSpan(String text) {
            super();
            this.text = text;
        }

        @Override
        public void updateDrawState(TextPaint ds) {
            ds.setColor(Color.parseColor("#ffffff"));//指定顏色值
            ds.setUnderlineText(false); // 去掉下劃線
        }

        @Override
        public void onClick(View widget) {
            // 點擊超連接時調用
            final Bundle bundle = new Bundle();
            bundle.putString("URL", text);
            Intent intent =//指定的跳轉事件
            mContext.startActivity(intent);
        }
    }複製代碼

在設置TextView以前須要對內容進行處理,將連接替換成爲ClickableSpan,再設置爲TextView的text。url

  首先是匹配url的正則表達式:spa

Pattern pattern = Pattern.compile("[http|https]+[://]+[0-9A-Za-z:/[-]_#[?][=][.]]*", Pattern.CASE_INSENSITIVE);
Matcher m = pattern.matcher(string);複製代碼

  而後是找出全部的url,並設置ClickableSpan替換code

int startPoint = 0;
while (m.find(startPoint)) {
    int endPoint = m.end();
    String hit = m.group();
    ClickableSpan clickSpan = new NoLineClickSpan(hit);
    sps.setSpan(clickSpan, endPoint - hit.length(), endPoint, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);//用Span替換對應長度的url
    startPoint = endPoint;
}
textView.setText(sps);複製代碼

  其中sps爲用String初始化的SpannableString對象。orm

相關文章
相關標籤/搜索