Vous pouvez le faire dans le code en recherchant et en remplaçant les URLSpan
instances par des versions qui ne sont pas soulignées. Après avoir appelé Linkify.addLinks()
, appelez la fonction stripUnderlines()
collée ci-dessous sur chacun de vos TextView
s:
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);
}
Cela nécessite une version personnalisée d'URLSpan qui n'active pas la propriété "underline" de TextPaint:
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
. L'new URLSpanNoUnderline
appel doit être passéspan.getURL()
pour conserver ces informations, sinon vous générez des liens incorrects qui provoquent des exceptions lorsque vous cliquez dessus. J'ai placé cette solution proposée dans la file d'attente de modification pour votre réponse, car je n'ai pas les autorisations de modification moi-même.Spannable s = (Spannable) textView.getText()
desSpannable s = new SpannableString(textView.getText());
ne fonctionne pas pour moi. Si je reviens à la diffusion, cela fonctionne, uniquement si TextView aandroid:textIsSelectable=true
. Une idée pourquoi?android:autoLink
attribut? Sinon, il semble que vous deviez créer vos propres méthodes onclick pour les fonctionnalités intégrées.Étant donné un textView et un contenu:
Voici un moyen concis de supprimer les soulignements des hyperliens:
Ceci est basé sur l'approche suggérée par robUx4.
Afin de rendre les liens cliquables, vous devez également appeler:
la source
String content = getResources().getString(R.string.content);
qui inclut un lien ne fonctionne plus.res/values/strings.xml
laquelle contient exactement la même chose que l'exemple. Pouvez-vous tester à votre fin?>
=>
,<
=<
etc. Par exemple:<string name="link_to_google" ><a href="https://www.google.com/">Google</a></string>
voir developer.android.com/guide/topics/resources/string-resourceUnderlineSpan
existe déjà, mais ne peut définir que le soulignement.Une autre solution consiste à ajouter une travée sans soulignement sur chaque élément existant
URLSpan
. Ainsi, l'état de soulignement est désactivé juste avant la peinture. De cette façon, vous gardez vosURLSpan
classes (éventuellement personnalisées) et tous les autres styles définis ailleurs.Voici comment vous le définissez sans supprimer l'objet URLSpan existant:
la source
J'ai mis en place une solution qui, à mon avis, est plus élégante. J'ai fait une coutume
TextView
. De cette façon, vous n'avez pas besoin d'exécuter du code supplémentaire pour chaqueTextView
avec des hyperliens.Et le code pour UrlSpanNoUnderline:
la source
Voici la fonction d'extension Kotlin :
Usage:
la source
À chaque fois, essayez de supprimer le soulignement d'URL avec spannable, je ne suggère que ces choses:
1> Création d'une classe personnalisée:
Cela nécessite une version personnalisée d' URLSpan qui n'active pas la propriété "underline" de TextPaint
2> setSpan avec texte spannable:
Ici, spannableText est l'objet de SpannableString ... !!!
la source
Si vous utilisez la propriété de liaison automatique Textview et que vous souhaitez supprimer les soulignements, vous pouvez l'utiliser:
Tout d'abord, étendez UnderlineSpan et supprimez le soulignement:
Deuxièmement, créez une instance de NoUnderlineSpan, créez un Spannable à partir du texte String et définissez l'étendue sur Spannable:
Référence: http://prog3.com/sbdm/blog/maosidiaoxian/article/details/39156563
la source
Si vous voulez juste le texte et ne vous souciez pas du lien URL
Cela va décoller le lien mais GARDER le texte
aucun cours supplémentaire requis
la source
Voici ma méthode
Appelez ça comme ça
Appcontroller est ma classe d'application où je mets cette méthode afin que je puisse y accéder de n'importe où
la source
Pour les utilisateurs de Xamarin qui trouvent ce message, voici comment je l'ai fait fonctionner:
la source
la source