Linkify è una grande classe, è alla ricerca di schemi complessi come URL, numeri di telefono, ecc. E li trasforma in URLSpans. Piuttosto che riscrivere le espressioni regolari esistenti ho esteso la classe URLSpan e ho creato un metodo per aggiornare solo l'URL del telefono su un URLSpan personalizzato con una finestra di dialogo di conferma.
prima mia classe URLSpan esteso, 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);
}
}
Avanti il metodo per scambiare le diverse classi campata:
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);
}
}
}
Infine tutto quello che dovete fare è creare un TextView con l'attributo autoLink:
android:autoLink="phone"
E ricordarsi di chiamare il metodo swapSpans()
. Capisco che l'ho scritto per divertimento, ci possono essere altri metodi per farlo, ma al momento non ne sono a conoscenza. Spero che questo ti aiuti!
Una soluzione potrebbe essere quella di estendere la ClickableSpan di fare il proprio trattamento personalizzato del cliccando sul link: http://developer.android.com/reference/android/text/style/ClickableSpan.html Controlla anche questo thread: http://stackoverflow.com/questions/11413399/open-textview-links-at-another-activity-not- default-browser – almalkawi