Mam zdefiniowany następujący TextView:
<TextView android:layout_width="wrap_content"
android:layout_height="wrap_content" android:text="@string/txtCredits"
android:autoLink="web" android:id="@+id/infoTxtCredits"
android:layout_centerInParent="true"
android:linksClickable="true"></TextView>
gdzie @string/txtCredits
jest zasób łańcucha, który zawiera <a href="some site">Link text</a>
.
Android wyróżnia linki w TextView, ale nie reagują one na kliknięcia. Czy ktoś może mi powiedzieć, co robię źle? Czy muszę ustawić onClickListener dla TextView w mojej aktywności dla czegoś tak prostego?
Wygląda na to, że ma to związek ze sposobem, w jaki definiuję mój zasób łańcucha. To nie działa:
<string name="txtCredits"><a href="http://www.google.com">Google</a></string>
Ale to powoduje:
<string name="txtCredits">www.google.com</string>
Co jest niepotrzebne, ponieważ wolałbym wyświetlić link tekstowy niż pełny adres URL.
android:focusable="true"
rozwiązał mój problemOdpowiedzi:
Pochowany w prezentacjach API znalazłem rozwiązanie mojego problemu:
Link.java:
Usunąłem większość atrybutów z TextView, aby dopasować to, co było w wersji demonstracyjnej.
To rozwiązało. Całkiem trudno je odkryć i naprawić.
Ważne : nie zapomnij usunąć,
autoLink="web"
jeśli dzwoniszsetMovementMethod()
.źródło
Używam tylko
android:autoLink="web"
i działa dobrze. Kliknięcie linku powoduje otwarcie przeglądarki i wyświetlenie właściwej strony.Mogę zgadnąć, że jakiś inny widok znajduje się nad linkiem. Coś, co jest przezroczyste, wypełnia całego rodzica, ale nie wyświetla niczego powyżej linku. W takim przypadku kliknięcie powoduje przejście do tego widoku zamiast łącza.
źródło
Po spędzeniu z tym trochę czasu odkryłem, że:
android:autoLink="web"
działa, jeśli masz pełne linki w swoim HTML. Następujące elementy zostaną wyróżnione na niebiesko i klikalne:view.setMovementMethod(LinkMovementMethod.getInstance());
będzie działać z następującymi (zostaną podświetlone i klikalne):Zauważ, że trzecia opcja ma hiperłącze, ale sam opis linku (część między tagami) nie jest linkiem.
android:autoLink="web"
ma nie pracować z takimi linkami.android:autoLink="web"
jeśli ustawiony w XML zastąpiview.setMovementMethod(LinkMovementMethod.getInstance());
(tj. linki trzeciego rodzaju zostaną podświetlone, ale nie klikalne).Morał tej historii jest wykorzystywany
view.setMovementMethod(LinkMovementMethod.getInstance());
w kodzie i upewnij się, że nie masz goandroid:autoLink="web"
w układzie XML, jeśli chcesz, aby wszystkie linki były klikalne.źródło
<a href="http://www.google.com">Go to Google</a>
nie będzie działać w przypadku autoLink. W przypadku tak wielu odpowiedzi na temat SO jest to jedyna, która o tym wspomniała. Dziękuję Ci!Powyższe rozwiązania nie działały dla mnie, ale następujące działały (i wydają się nieco czystsze).
Najpierw w zasobie łańcucha zdefiniuj szewrony otwierające znacznik, używając kodowania encji HTML, tj .:
i nie:
Zasadniczo koduj wszystkie szewrony w taki sposób. BTW, link musi zaczynać się od
http://
Następnie (zgodnie z sugestią tutaj ) ustaw tę opcję w TextView:
Na koniec w kodzie wykonaj:
To wszystko, nie wymaga żadnych wyrażeń regularnych ani innych ręcznych hacków.
źródło
%20
<![CDATA[ ... ]]>
tagu.<![CDATA[...]]>
tagiem.użyłem tego po prostu
umożliwia klikanie podanych tutaj linków
źródło
<a href...
klikalneJeśli chcesz dodać link podobny do HTML, wszystko, co musisz zrobić, to:
dodaj ciąg podobny do HTML:
dodaj swój widok do układu BEZ żadnej konfiguracji specyficznej dla łącza:
dodaj program MovementMethod programowo do TextView:
Otóż to! I tak, posiadanie opcji takich jak „autoLink” i „linksClickable” działające tylko na wyraźnych linkach (niepakowanych w tagi HTML) jest również bardzo mylące dla mnie ...
źródło
Dodałem tę linię do
TextView
:android:autoLink="web"
Poniżej znajduje się przykład użycia w pliku układu.
layout.xml
próbastring.xml
źródło
Poniższe informacje powinny działać dla każdego, kto szuka kombinacji tekstu i hiperłącza w aplikacji na Androida.
W
string.xml
:Teraz możesz wykorzystać to
string
w dowolnym zView
poniższych:Teraz w swojej Aktywności lub fragmencie wykonaj następujące czynności:
Do tej pory nie musisz ustawiać
android:autoLink="web"
aniandroid:linksClickable="true"
używać tego podejścia.Mam nadzieję, że okaże się to pomocne.
źródło
Mam nadzieję, że to Ci pomoże;
źródło
android:autoLink=?
ze swojegoTextView
.android:autoLink=?
jest ważne!Tylko to, czego potrzebujesz, aby dodać to w widoku tekstowym w XML
źródło
Najłatwiejszą rzeczą, która działała dla mnie, jest użycie Linkify
i automatycznie wykryje adresy URL z tekstu w widoku tekstu.
źródło
Richard, następnym razem powinieneś dodać ten kod w TextView w XML-ie układu.
Tak powinno być.
Nie musisz używać tego kodu (
t2.setMovementMethod(LinkMovementMethod.getInstance());
), aby link był klikalny.Oto też prawda: dopóki ustawisz autoLink i linksClickable , nie zapomnij dodać tego w pliku String.xml , aby link klikalny działał.
źródło
za pomocą linkify : Linkify weź kawałek tekstu i wyrażenie regularne i zamieni wszystkie dopasowania wyrażeń regularnych w tekście w klikalne linki
Nie zapomnij
źródło
Oto bardzo liniowy kod Androida, dzięki któremu telefon i adres URL można wybierać z tekstu Wyświetl bez względu na ciąg znaków i dane. Nie musisz do tego używać żadnych tagów HTML.
źródło
Zauważyłem, że w
android:autoLink="web"
ten sposóbdziałało OK dla adresów URL, ale ponieważ miałem adres e-mail i numer telefonu, który również chciałem połączyć, skończyłem z użyciem tej linii w
android:autoLink="all"
ten sposóbi działało jak urok.
źródło
Zarządzaj linkami Tekst Kolor także
źródło
Pamiętaj, aby nie używać
setAutoLinkMask(Linkify.ALL)
podczas używaniasetMovementMethod(LinkMovementMethod.getInstance())
iHtml.fromHTML()
prawidłowo sformatowanychHTML
linków (na przykład<a href="http://www.google.com/">Google</a>
).źródło
Użyj tego...
i dodaj uprawnienia w pliku manifestu
źródło
Potrzebujesz tylko tego:
Wstaw ten wiersz do TextView, który można kliknąć w odniesieniu do sieci. Adres URL ustawiony jako tekst tego TextView.
Przykład:
źródło
Akceptowana odpowiedź jest poprawna, ALE oznacza to, że numery telefonów, mapy, adresy e-mail i zwykłe linki, np.
http://google.com
Bez tagów href, NIE JUŻ WIĘCEJ będą klikalne, ponieważ nie możesz mieć automatycznego łącza w pliku XML.Jedyne kompletne rozwiązanie, w którym WSZYSTKO można kliknąć, które znalazłem, to:
I TextView NIE powinien mieć
android:autolink
. Nie ma też takiej potrzebyandroid:linksClickable="true"
; to prawda, domyślnie.źródło
myapp://
schematów (w przypadku głębokiego linkowania).W ten sposób rozwiązałem klikalne i widoczne linki w TextView (według kodu)
źródło
Użyj poniższego kodu:
źródło
[Tested in Pre-lollipop as well as in Lollipop and above]
Możesz pobrać ciąg HTML z backendu lub z plików zasobów. Jeśli umieścisz tekst jako ciąg zasobu, pamiętaj o dodaniu
CDATA
znacznika:Następnie w kodzie musisz pobrać ciąg i przypisać go jako HTML i ustawić metodę ruchu łącza:
źródło
Przyczyną tego problemu jest to, że próbuje dopasować tylko „nagie” adresy. takie jak „www.google.com” lub „ http://www.google.com ”.
Uruchomienie tekstu przez Html.fromHtml () powinno załatwić sprawę . Musisz to zrobić programowo, ale działa.
źródło
Nie wiem, czy warto dodać kolejną odpowiedź, ale na wszelki wypadek ...
Musiałem wytropić to w kilku miejscach, ale w końcu udało mi się uruchomić tę wersję kodu.
strings.xml:
myactivity.xml:
myactivty.java (in onCreate ()):
Spowoduje to utworzenie dwóch klikalne odnośniki z tekstu
link text1
ilink text2
które przekierować użytkownika do Google.źródło
Telefon Autolink nie działa dla mnie. Poniższe działało jak urok,
źródło
Jeśli korzystasz z TextView opartego na XML, dla swoich wymagań musisz zrobić tylko dwie rzeczy:
Zidentyfikuj link w ciągu, na przykład „to jest moja strona internetowa”. Możesz dodać go w formacie xml lub w kodzie.
W pliku XML, który ma TextView, dodaj te:
źródło
Dodaj CDATA do zasobu ciągów
Strings.xml
źródło
Używam automatycznego linku do „automatycznego podkreślenia” tekstu, ale właśnie wykonałem „onClick”, który nim zarządza. (Sam napotkałem ten problem)
Nie wymaga żadnych uprawnień, ponieważ przekazujesz zamiar aplikacjom zarządzającym tymi zasobami (przeglądarka IE).
To działało dla mnie. Powodzenia.
źródło
Po prostu zmarnowałem tyle czasu, aby dowiedzieć się, że musisz użyć getText (R.string. Cokolwiek) zamiast getString (R.string. Cokolwiek) ...
Tak czy inaczej, oto w jaki sposób mój działał. Z wieloma hiperłączami w tym samym widoku tekstu.
przykład ciągu
źródło