Você pode fazer isso no código, localizando e substituindo as URLSpan
instâncias por versões que não sublinham. Depois de chamar Linkify.addLinks()
, chame a função stripUnderlines()
colada abaixo em cada um de seus 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);
}
Isso requer uma versão personalizada de URLSpan que não ativa a propriedade "sublinhado" do 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
. Anew URLSpanNoUnderline
chamada deve ser passadaspan.getURL()
para reter essas informações, caso contrário, você gerará links ruins que causam exceções quando clicados. Coloquei esta solução proposta na fila de edição para sua resposta, uma vez que não tenho permissão para editar.Spannable s = (Spannable) textView.getText()
porSpannable s = new SpannableString(textView.getText());
não funciona para mim. Se eu voltar para a transmissão, ele funcionará, apenas se o TextView tiver funcionadoandroid:textIsSelectable=true
. Alguma ideia do porquê?android:autoLink
atributo? Caso contrário, parece que você tem que criar seus próprios métodos onclick para a funcionalidade integrada.Dado um textView e conteúdo:
Esta é uma maneira concisa de remover sublinhados de hiperlinks:
Isso é baseado na abordagem sugerida por robUx4.
Para tornar os links clicáveis, você também precisa ligar para:
fonte
String content = getResources().getString(R.string.content);
que inclui um link não funciona mais.res/values/strings.xml
qual contém exatamente a mesma coisa que o exemplo. Você pode testar no seu final?>
=>
,<
=<
etc. Por exemplo:<string name="link_to_google" ><a href="https://www.google.com/">Google</a></string>
Consulte developer.android.com/guide/topics/resources/string-resourceUnderlineSpan
já existe, mas só pode definir o sublinhado.Outra solução é adicionar uma extensão sem sublinhado em cada existente
URLSpan
. Assim, o estado sublinhado é desativado antes da pintura. Dessa forma, você mantém suasURLSpan
classes (possivelmente personalizadas) e todos os outros estilos definidos em outro lugar.Veja como você o define sem remover o objeto URLSpan existente:
fonte
Implementei uma solução que, na minha opinião, é mais elegante. Eu fiz um costume
TextView
. Dessa forma, você não precisa executar código extra para cada umTextView
com hiperlinks.E o código para UrlSpanNoUnderline:
fonte
Aqui está a função de extensão Kotlin :
Uso:
fonte
Sempre, tente remover o sublinhado do URL com spannable, sugiro apenas estas coisas:
1> Criação de classe personalizada:
Isso requer uma versão personalizada de URLSpan que não habilita a propriedade "sublinhado" do TextPaint
2> setSpan com texto expansível:
Aqui, spannableText é objeto de SpannableString ... !!!
fonte
Se você estiver usando a propriedade autolink Textview e quiser remover sublinhados, poderá usá-la:
Primeiro, estenda UnderlineSpan e remova o sublinhado:
Em segundo lugar, crie uma instância de NoUnderlineSpan, crie um Spannable a partir do texto String e defina o span como spannable:
Referência: http://prog3.com/sbdm/blog/maosidiaoxian/article/details/39156563
fonte
Se você quer apenas o texto e não se preocupa com o link da URL
Isso STRIP o link, mas MANTERÁ o texto
nenhuma aula adicional necessária
fonte
Aqui está o meu método
Chame assim
Appcontroller é minha classe de aplicativo onde coloco este método para que possa acessá-lo de qualquer lugar
fonte
Para os usuários do Xamarin que estão encontrando esta postagem, aqui está como eu fiz isso funcionar:
fonte
fonte