J'ai un TextView qui rend le HTML de base, contenant plus de 2 liens. Je dois capturer les clics sur les liens et ouvrir les liens - dans ma propre WebView interne (pas dans le navigateur par défaut).
La méthode la plus courante pour gérer le rendu des liens semble être la suivante:
String str_links = "<a href='http://google.com'>Google</a><br /><a href='http://facebook.com'>Facebook</a>";
text_view.setLinksClickable(true);
text_view.setMovementMethod(LinkMovementMethod.getInstance());
text_view.setText( Html.fromHtml( str_links ) );
Cependant, cela provoque l'ouverture des liens dans le navigateur Web interne par défaut (affichant la boîte de dialogue "Terminer l'action avec ...").
J'ai essayé d'implémenter un onClickListener, qui se déclenche correctement lorsque le lien est cliqué, mais je ne sais pas comment déterminer QUEL lien a été cliqué ...
text_view.setOnClickListener(new OnClickListener(){
public void onClick(View v) {
// what now...?
}
});
Alternativement, j'ai essayé de créer une classe LinkMovementMethod personnalisée et d'implémenter onTouchEvent ...
public boolean onTouchEvent(TextView widget, Spannable text, MotionEvent event) {
String url = text.toString();
// this doesn't work because the text is not necessarily a URL, or even a single link...
// eg, I don't know how to extract the clicked link from the greater paragraph of text
return false;
}
Des idées?
Exemple de solution
J'ai proposé une solution qui analyse les liens d'une chaîne HTML et les rend cliquables, puis vous permet de répondre à l'URL.
span.getURL()
".) Vous pouvez même l'afficher comme réponse, car c'est mieux que la réponse actuellement acceptée!