首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Android TextView 去除鏈接下劃線:自定義 URLSpan 覆寫 updateDrawState

     編輯:程式設計綜合問答

核心代碼

private void stripUnderlines(TextView textView) {
    Spannable s = (Spannable) textView.getText();
    URLSpan[] spans = s.getSpans(0, s.length(), URLSpan.class);
    for (URLSpan span : spans) {
        int start = s.getSpanStart(span);
        int end = s.getSpanEnd(span);
        s.removeSpan(span);
        // 替換為無下劃線 Span
        span = new URLSpanNoUnderline(span.getURL());
        s.setSpan(span, start, end, 0);
    }
    textView.setText(s); // 觸發重繪
}

// 自定義 Span
private static class URLSpanNoUnderline extends URLSpan {
    public URLSpanNoUnderline(String url) { super(url); }
    @Override
    public void updateDrawState(TextPaint ds) {
        super.updateDrawState(ds);
        ds.setUnderlineText(false); // 關鍵:關閉下劃線
    }
}

使用

TextView email = findViewById(R.id.email);
email.setText("contact@example.com");
Linkify.addLinks(email, Linkify.EMAIL_ADDRESSES);
stripUnderlines(email); // 去除下劃線

// 同樣可設置顏色
email.setLinkTextColor(Color.WHITE);

適用場景

  • Linkify 自動識別的 URL、Email、Phone、Map 地址。
  • 手動設置的 `SpannableString` + `URLSpan`。

替代:HTML + fromHtml

String html = "contact@example.com";
textView.setText(Html.fromHtml(html, Html.FROM_HTML_MODE_LEGACY));
textView.setMovementMethod(LinkMovementMethod.getInstance());

HTML 方式可直接通過 CSS `text-decoration:none` 去除下劃線,但 Linkify 更適合純文本自動識別場景。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved