Linkify là một lớp tuyệt vời, nó săn tìm các mẫu phức tạp như URL, số điện thoại, v.v. và biến chúng thành URLSpans. Thay vì viết lại các biểu thức chính quy hiện có, tôi đã mở rộng lớp URLSpan và tạo phương thức để nâng cấp chỉ URL của điện thoạiChuyển đến URL tùy chỉnhSpan có hộp thoại xác nhận.
Đầu tiên tôi mở rộng lớp URLSpan, ConfirmSpan:
class ConfirmSpan extends URLSpan {
AlertDialog dialog;
View mView;
public ConfirmSpan(URLSpan span) {
super(span.getURL());
}
@Override
public void onClick(View widget) {
mView = widget;
if(dialog == null) {
AlertDialog.Builder mBuilder = new AlertDialog.Builder(widget.getContext());
mBuilder.setMessage("Do you want to call: " + getURL().substring(4) + "?");
mBuilder.setNegativeButton("No", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
dialog.cancel();
}
})
.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
openURL();
}
});
dialog = mBuilder.create();
}
dialog.show();
}
public void openURL() {
super.onClick(mView);
}
}
Tiếp phương pháp trao đổi trên các lớp tuổi khác nhau:
private void swapSpans(TextView textView) {
Spannable spannable = (Spannable) textView.getText();
URLSpan[] spans = textView.getUrls();
for(URLSpan span : spans) {
if(span.getURL().toString().startsWith("tel:")) {
spannable.setSpan(new ConfirmSpan(span), spannable.getSpanStart(span), spannable.getSpanEnd(span), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
spannable.removeSpan(span);
}
}
}
Cuối cùng tất cả các bạn cần làm là tạo một TextView với thuộc tính autoLink:
android:autoLink="phone"
Và hãy nhớ gọi phương thức swapSpans()
. Hiểu rằng tôi đã viết điều này cho vui, có thể có các phương pháp khác để làm điều này nhưng tôi không biết về chúng vào lúc này. Hi vọng điêu nay co ich!
Một giải pháp sẽ được mở rộng ClickableSpan để làm xử lý tùy chỉnh của riêng bạn nhấn vào liên kết: http://developer.android.com/reference/android/text/style/ClickableSpan.html Cũng kiểm tra chủ đề này: http://stackoverflow.com/questions/11413399/open-textview-links-at-another-activity-not- mặc định trình duyệt – almalkawi