Sie können dies im Code tun, indem Sie die URLSpan
Instanzen suchen und durch Versionen ersetzen , die nicht unterstreichen. Rufen Sie nach dem Linkify.addLinks()
Aufruf die stripUnderlines()
unten auf jedem Ihrer TextView
s eingefügte Funktion auf :
private void stripUnderlines(TextView textView) {
Spannable s = new SpannableString(textView.getText());
URLSpan[] spans = s.getSpans(0, s.length(), URLSpan.class);
for (URLSpan span: spans) {
int start = s.getSpanStart(span);
int end = s.getSpanEnd(span);
s.removeSpan(span);
span = new URLSpanNoUnderline(span.getURL());
s.setSpan(span, start, end, 0);
}
textView.setText(s);
}
Dies erfordert eine angepasste Version von URLSpan, die die "underline" -Eigenschaft von TextPaint nicht aktiviert:
private class URLSpanNoUnderline extends URLSpan {
public URLSpanNoUnderline(String url) {
super(url);
}
@Override public void updateDrawState(TextPaint ds) {
super.updateDrawState(ds);
ds.setUnderlineText(false);
}
}
tel:2125551212
. Dernew URLSpanNoUnderline
Anruf sollte weitergeleitet werdenspan.getURL()
, um diese Informationen beizubehalten. Andernfalls generieren Sie fehlerhafte Links, die beim Klicken Ausnahmen verursachen. Ich habe diese vorgeschlagene Lösung für Ihre Antwort in die Bearbeitungswarteschlange gestellt, da ich selbst keine Bearbeitungsberechtigungen habe.Spannable s = (Spannable) textView.getText()
mitSpannable s = new SpannableString(textView.getText());
funktioniert bei mir nicht. Wenn ich wieder zum Casting wechsle, funktioniert es nur, wenn die TextView hatandroid:textIsSelectable=true
. Irgendeine Idee warum?android:autoLink
Attribut zum Laufen zu bringen? Andernfalls müssen Sie anscheinend Ihre eigenen Onclick-Methoden für die integrierte Funktionalität erstellen.Gegeben eine Textansicht und Inhalt:
Hier ist eine übersichtliche Möglichkeit, Unterstreichungen aus Hyperlinks zu entfernen:
Dies basiert auf dem von robUx4 vorgeschlagenen Ansatz.
Um die Links anklickbar zu machen, müssen Sie auch anrufen:
quelle
String content = getResources().getString(R.string.content);
ein Link nicht mehr funktioniert.res/values/strings.xml
der genau dasselbe wie im Beispiel enthalten ist. Können Sie am Ende testen?>
=>
,<
=<
usw. Zum Beispiel:<string name="link_to_google" ><a href="https://www.google.com/">Google</a></string>
Siehe developer.android.com/guide/topics/resources/string-resourceUnderlineSpan
existiert bereits, kann aber nur die Unterstreichung setzen.Eine andere Lösung besteht darin, jedem vorhandenen Bereich einen Bereich ohne Unterstreichung hinzuzufügen
URLSpan
. Daher wird der Unterstreichungsstatus unmittelbar vor dem Malen deaktiviert. Auf diese Weise behalten Sie IhreURLSpan
(möglicherweise benutzerdefinierten) Klassen und alle anderen Stile an anderer Stelle bei.So legen Sie es fest, ohne das vorhandene URLSpan-Objekt zu entfernen:
quelle
Ich habe eine Lösung implementiert, die meiner Meinung nach eleganter ist. Ich habe einen Brauch gemacht
TextView
. Auf diese Weise müssen Sie nicht für jeden CodeTextView
mit Hyperlinks zusätzlichen Code ausführen .Und Code für UrlSpanNoUnderline:
quelle
Wann immer, versuchen Sie , URL unterstreichen mit spannable zu entfernen, schlage ich nur diese Dinge vor:
1> Benutzerdefinierte Klasse erstellen:
Dies erfordert eine angepasste Version von URLSpan, die die "underline" -Eigenschaft von TextPaint nicht aktiviert
2> setSpan mit spannbarem Text:
Hier ist spannableText Objekt von SpannableString ... !!!
quelle
Hier ist die Kotlin- Erweiterungsfunktion:
Verwendung:
quelle
Wenn Sie die Textview-Autolink-Eigenschaft verwenden und Unterstreichungen entfernen möchten, können Sie sie verwenden:
Erweitern Sie zunächst UnderlineSpan und entfernen Sie die Unterstreichung:
Zweitens erstellen Sie eine Instanz von NoUnderlineSpan, erstellen eine Spannable aus dem String-Text und setzen die Spanne auf die Spannable:
Referenz: http://prog3.com/sbdm/blog/maosidiaoxian/article/details/39156563
quelle
Wenn Sie nur den Text möchten und sich nicht um den URL-Link kümmern
Dies wird STRIP den Link aber HALTEN den Text
Keine zusätzlichen Klassen erforderlich
quelle
Hier ist meine Methode
Nennen Sie es so
Appcontroller ist meine Anwendungsklasse, in der ich diese Methode verwende, damit ich von überall darauf zugreifen kann
quelle
Für Xamarin-Benutzer, die diesen Beitrag finden, habe ich Folgendes zum Laufen gebracht:
quelle
quelle