我有一个编辑文本,表现得像脸书中的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" />
答案 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。