Mam TextView, który renderuje podstawowy HTML, zawierający 2+ linki. Muszę przechwytywać kliknięcia linków i otwierać je - w moim własnym wewnętrznym WebView (nie w domyślnej przeglądarce).
Najczęstsza metoda obsługi renderowania linków wygląda następująco:
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 ) );
Powoduje to jednak, że łącza otwierają się w domyślnej wewnętrznej przeglądarce internetowej (pokazując okno dialogowe „Zakończ działanie za pomocą ...”).
Próbowałem zaimplementować onClickListener, który poprawnie uruchamia się po kliknięciu linku, ale nie wiem, jak ustalić, który link został kliknięty ...
text_view.setOnClickListener(new OnClickListener(){
public void onClick(View v) {
// what now...?
}
});
Alternatywnie próbowałem utworzyć niestandardową klasę LinkMovementMethod i zaimplementować 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;
}
Pomysły?
Przykładowe rozwiązanie
Wymyśliłem rozwiązanie, które analizuje linki z ciągu HTML i umożliwia ich klikanie, a następnie pozwala odpowiedzieć na adres URL.
span.getURL()
”.) Możesz nawet opublikować to jako odpowiedź, ponieważ jest to lepsze niż obecnie akceptowana odpowiedź!