Atrybut autoLink
ma przykry błąd: jeśli klikniesz w przykładzie numerem telefonu, a następnie wrócić i kliknij na drugim linku URL - go ponownie otworzy numer telefonu. Ten atrybut działa tak źle z wielu linków, że wdrożyliśmy własną klasę, tu jest link na Github ClickableLinksTextView.java
W przykładzie można zastąpić klasę TextView
przez mojego ClickableLinksTextView
klasy w xml-układ i zmienić kod tak:
ClickableLinksTextView textView = (ClickableLinksTextView)view.findViewById(R.id.mytext);
textView.setText("My text: +4412345678 Go to website: www.google.com Blah blah");
Linkify.addLinks(textView, Linkify.ALL);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
textView.setMovementMethod(ArrowKeyMovementMethod.getInstance());
textView.setTextIsSelectable(true);
// the autoLink attribute must be removed, if you hasn't set it then ok, otherwise call textView.setAutoLink(0);
}
pierwotną przyczyną problemu w Twoim pytaniem jest to, że klasa LinkMovementMethod
i atrybut textIsSelectable
nie są kompatybilne w ogóle, nawet programiści Android OS przyznać w the Android OS source code.
Nie zmieniaj metody przemieszczania dla tekstu, który obsługuje zaznaczanie tekstu, ponieważ może to zapobiec dowolnemu przesunięciu kursora.
Jeśli widok tekst jest wybierane, tylko 2 prawidłowe wartości metoda ruchowe są null
i ArrowKeyMovementMethod
. Właśnie dlatego w moim przykładzie ustawiłem jawnie ArrowKeyMovementMethod
, ponieważ Linkify.addLinks
ustawia niepoprawną metodę ruchu i powinienem ją przywrócić.
Co do błędu atrybutu autoLink, to dlatego, że programiści Android nie prawidłowo skopiowali wykrywanie linków. Możesz spojrzeć na przykład kodu w odpowiedzi na @cheng yang, kod po prostu bierze pierwszy link bez względu na to, ile masz.
Co robisz, to nie działa? Czy próba zmotywowania go do działania jest tylko pracą? –
Kiedy robię to pod kontrolą, mogę klikać na adresy URL i telefony. Ale kiedy go zaznaczę, klikanie nie jest już możliwe – pixel