带点显示为超链接的文本

时间:2017-04-13 06:19:48

标签: android hyperlink

我有一个编辑文本,表现得像脸书中的Feed。因此,每当我发布类似“www.google.com”的内容时,它都显示为超链接,但同时每当我发布类似“abcd.abcd”的内容时,它也会将我显示为超链接。我想在我添加“http”或“www”时将我的帖子显示为链接,如何实现此目的。提前致谢

<EditText
                android:id="@+id/etFeedsText"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:minHeight="50dp"
                android:maxLength="2000"
                android:layout_marginBottom="25.8dp"
                android:layout_marginLeft="14dp"
                android:layout_marginTop="8.3dp"
                android:hint="@string/enter_your_post"
                android:background="@color/white"
                android:inputType="textMultiLine|textNoSuggestions"
                android:textColor="@color/feeds_text"
                android:textSize="13.3sp" />     

2 个答案:

答案 0 :(得分:2)

您可以比较文字和文字。可以通过这种方法找出它是否是有效的URL,

/** 
* This is used to check the given URL is valid or not.
* @param url
* @return true if url is valid, false otherwise.
*/
private boolean isValidUrl(String url) {
    Pattern p = Patterns.WEB_URL;
    Matcher m = p.matcher(url.toLowerCase());
    return m.matches();
}

如果文字不是网址,请从底部删除下划线,如

if(!isValidUrl(yourUrl)){
   stripUnderlines(TextView textView)
}


private void stripUnderlines(TextView textView) {
        Spannable s = new SpannableString(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 = new URLSpanNoUnderline(span.getURL());
            s.setSpan(span, start, end, 0);
        }
        textView.setText(s);
    }

它需要一个自定义版本的URLSpan,它不能启用TextPaint的“下划线”属性:

private class URLSpanNoUnderline extends URLSpan {
        public URLSpanNoUnderline(String url) {
            super(url);
        }
        @Override public void updateDrawState(TextPaint ds) {
            super.updateDrawState(ds);
            ds.setUnderlineText(false);
        }
    }

希望这有帮助!

答案 1 :(得分:1)

只需将其添加到您的Edittext

即可
Linkify.addLinks(etFeedsText, Linkify.WEB_URLS);

这将仅考虑有效的网址。 如果您只是显示数据,也可以使用textview。不需要Edittext。