Chcę utworzyć link do tekstu tekstowego, takiego jak Google . Czy w ogóle istnieje taki link. (tj.) Po kliknięciu słowa Google powinno otworzyć się odpowiedni link. Wszelkie pomysły są mile widziane.
Jeśli tekst hiperłącza znajduje się w pliku strings.xml, żadna z sugerowanych odpowiedzi nie działa. Działa w bardzo dziwny sposób. Jeśli ustawię tekst bezpośrednio w układzie xml, to działa, ale kiedy ustawię dane Textview w kodzie java, nie działa.
Velu
2
Wystarczy wspomnieć, że jeśli używasz kodu Java, musisz usunąć go android:autoLink="web"z XML. Miałem oba i to nie działało.
Αntonis Papadakis
53
użyj android:autoLink="web"w XML swojego TextView. Powinien automatycznie konwertować adresy URL, które można kliknąć (jeśli znajdują się w tekście)
<string name="lostpassword">If you lost your password please contact <a href="mailto:[email protected]?Subject=Lost%20Password" target="_top">support@cleverfinger.com.au</a></string>
<stringname="defaultpassword">User Guide <ahref="http://www.cleverfinger.com.au/user-guide/">http://www.cleverfinger.com.au/user-guide/</a></string>
Odpowiedzi:
Spróbuj tego i daj mi znać, co się stało ...
Korzystanie z kodu java:
TextView textView =(TextView)findViewById(R.id.textView); textView.setClickable(true); textView.setMovementMethod(LinkMovementMethod.getInstance()); String text = "<a href='http://www.google.com'> Google </a>"; textView.setText(Html.fromHtml(text));
Od poziomu API> = 24
Html.fromHtml(String source)
jest przestarzały, zamiast tego użyjfromHtml(String, int)
,textView.setText(Html.fromHtml(text, Html.FROM_HTML_MODE_COMPACT));
Lub w pliku XML układu, wewnątrz atrybutów widgetu TextView
android:autoLink="web" android:linksClickable="true"
źródło
android:autoLink="web"
z XML. Miałem oba i to nie działało.użyj
android:autoLink="web"
w XML swojego TextView. Powinien automatycznie konwertować adresy URL, które można kliknąć (jeśli znajdują się w tekście)źródło
Wszystkie przetestowane i działające 100%
rozwiązanie:
android:autoLink="web"
poniżej znajduje się kompletny przykład
Sample Layout Xml
<TextView android:id="@+id/txtLostpassword" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:autoLink="email" android:gravity="center" android:padding="20px" android:text="@string/lostpassword" android:textAppearance="?android:attr/textAppearanceSmall" /> <TextView android:id="@+id/txtLostpassword" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:autoLink="web" android:gravity="center" android:padding="20px" android:text="@string/defaultpassword" android:textAppearance="?android:attr/textAppearanceSmall" />
Ciąg w string.xml
<string name="lostpassword">If you lost your password please contact <a href="mailto:[email protected]?Subject=Lost%20Password" target="_top">support@cleverfinger.com.au</a></string> <string name="defaultpassword">User Guide <a href="http://www.cleverfinger.com.au/user-guide/">http://www.cleverfinger.com.au/user-guide/</a></string>
źródło
Można to również zrobić przy użyciu domyślnej właściwości Textview
android:autoLink="email"
źródło
Uwaga: - Html.fromHtml jest przestarzały w systemie Android N
Musisz sprawdzić i wsparcie
Android N
i wyższe wersje Androida//Set clickable true tagHeading.setClickable(true); //Handlle click event tagHeading.setMovementMethod(LinkMovementMethod.getInstance()); if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.N) { tagHeading.setText(Html.fromHtml("<a href='https://github.com/hiteshsahu'>https://github.com/hiteshsahu</a>", Html.FROM_HTML_MODE_LEGACY)); } else { tagHeading.setText(Html.fromHtml("<a href='https://github.com/hiteshsahu'>https://github.com/hiteshsahu</a>")); }
Alternatywnie
Możesz nie chcieć programowo dodawać flagi autoLink do programu TextView.
W ten sposób nie musisz dodawać
<a href='somelink'>
tagów.Co jest wadą, jeśli chcesz dodać
hyperlink
atext
, nie możesz tego zrobić w ten sposób. np. nie możesz zrobić czegoś takiego: - [ hiteshsahu ] [1]<TextView android:id="@+id/tag_info" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/tag_ll" android:layout_gravity="left" android:layout_margin="10dp" android:autoLink="web" android:linksClickable="true" android:text="https://github.com/hiteshsahu" android:textColor="@color/secondary_text" />
Wynik obu podejść: -
https://github.com/hiteshsahu
źródło
Najnowsza wersja SDK
fromHtml
jest przestarzała Użyj poniższego wierszaString yourtext = "<a style='text-decoration:underline' href='http://www.sample.com'> Sample Website </a>"; if (Build.VERSION.SDK_INT >= 24) { textView.setText(Html.fromHtml(yourtext, Html.FROM_HTML_MODE_LEGACY)); } else { textView.setText(Html.fromHtml(yourtext)); }
źródło
Zrobiłem następującą funkcję rozszerzenia widoku tekstowego.
@SuppressLint("SetTextI18n") fun TextView.makeHyperLink(url: String) { text = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { Html.fromHtml("<a href='${url}'>${text}</a>", Html.FROM_HTML_MODE_COMPACT) } else { Html.fromHtml("<a href='${url}'>${text}</a>") } movementMethod = LinkMovementMethod.getInstance() isClickable = true }
i nazywając to w ten sposób
tvTos.makeHyperLink(tos_url)
Możesz także przekazać tekst jako parametr.
źródło