Linkify to świetna klasa, szuka skomplikowanych wzorców, takich jak adresy URL, numery telefonów itp. I zamienia je w URLSpans. Zamiast ponownie pisać istniejące wyrażenia regularne, rozszerzyłem klasę URLSpan i utworzyłem metodę aktualizacji tylko telefonu URLSpans do niestandardowego URLSpan z dialogiem potwierdzenia.
Pierwszy mój rozszerzony klasa 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);
}
}
Następny sposób, aby zamienić się z różnych klas Okres:
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);
}
}
}
Wreszcie wszystko, co trzeba zrobić, to Utwórz TextView z atrybutem autoLink:
android:autoLink="phone"
Pamiętaj, aby wywołać metodę swapSpans()
. Zrozum, że napisałem to dla zabawy, mogą istnieć inne metody robienia tego, ale nie jestem w tej chwili o nich poinformowany. Mam nadzieję że to pomoże!
Jednym rozwiązaniem byłoby rozszerzenie ClickableSpan zrobić własną obsługę niestandardowej klikając na link: http://developer.android.com/reference/android/text/style/ClickableSpan.html Sprawdź również ten wątek: http://stackoverflow.com/questions/11413399/open-textview-links-at-another-activity-not- domyślna przeglądarka – almalkawi