Como tornar clicáveis ​​os links em um TextView?


1004

Eu tenho o seguinte TextView definido:

<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>

onde @string/txtCreditsé um recurso de cadeia que contém <a href="some site">Link text</a>.

O Android está destacando os links no TextView, mas eles não respondem a cliques. Alguém pode me dizer o que estou fazendo de errado? Preciso definir um onClickListener para o TextView na minha atividade para algo tão simples quanto isso?

Parece que tem a ver com a maneira como eu defino meu recurso de string. Isso não funciona:

<string name="txtCredits"><a href="http://www.google.com">Google</a></string>

Mas isso faz:

<string name="txtCredits">www.google.com</string>

O que é uma chatice, porque eu prefiro mostrar um link de texto do que mostrar o URL completo.


67
android: autoLink = "web", esta é a linha principal que precisa ser adicionada ao xml e funciona como um encanto. Obrigado @Richard
jeet.chanchawat

1
<string name = "txtCredits"> <a href=" google.com"> www.google.com </a> </ string > use o texto acima e ele funciona. É aprendi que a corda no href e com a marca de âncora deve ser o mesmo e ter .com ou * para necessidade de trabalho para verificar o porquê.
Shaik Khader

<string name = "txtCredits"> Algum texto aqui <a href=" google.com"> Google </a> </ string > Para o snippet acima Clique em Algum texto aqui não deve funcionar no meu caso, o que devo fazer?
precisa


android:focusable="true"resolveu o meu problema
Khang .nt

Respostas:


1228

Enterrado nas demos da API, encontrei a solução para o meu problema:

Link.java:

    // text2 has links specified by putting <a> tags in the string
    // resource.  By default these links will appear but not
    // respond to user input.  To make them active, you need to
    // call setMovementMethod() on the TextView object.

    TextView t2 = (TextView) findViewById(R.id.text2);
    t2.setMovementMethod(LinkMovementMethod.getInstance());

Eu removi a maioria dos atributos no meu TextView para corresponder ao que estava na demonstração.

<TextView
    android:id="@+id/text2"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/txtCredits"/>

Isso resolveu. Muito difícil de descobrir e consertar.

Importante : Não se esqueça de remover autoLink="web"se estiver ligando setMovementMethod().


19
Talvez seja só eu, mas por que você faria isso com um EditText?
8267 Justin

1
Acontece que apenas setMovementMethod é necessário para atingir a meta.
Superarts.org

3
Apenas como comentário, vi alguns Samsung Galaxy S3 com OS 4.3 que travam quando o "setMovementMethod (LinkMovementMethod.getInstance ())" é usado, então leve isso em conta, tive que criar uma validação antes de adicioná-lo
Jorge Aguilar

40
O mesmo aqui. Observe que, se setMovementMethod () for chamado, é necessário remover autolink = "web" no arquivo XML, caso contrário, o link não funcionará. Obrigado pelo comentário
voghDev

6
Basta usar o atributo "autoLink" no seu xml para, por exemplo: android: autoLink = "web"
Kalpesh

533

Estou usando apenas android:autoLink="web"e funciona bem. Um clique no link abre o navegador e mostra a página correta.

Uma coisa que eu poderia adivinhar é que alguma outra visão está acima do link. Algo transparente preenche todo o pai, mas não exibe nada acima do link. Nesse caso, o clique acessa essa visualização em vez do link.


3
Adicionadas mais informações acima. Será que estou definindo a string como <string name = "txtCredits"> <a href=" google.com"> Google </a> </ string >? Parece que isso é permitido, mas não está funcionando para mim.
Richard

6
se você usa o linkify auto, não precisa da parte a href. O sistema operacional analisará a string em URLs e converterá cada URL em um link clicável. Mas isso não resultará na vinculação da palavra google ao google.com. Seria exibido www.google.com como link.
Janusz

o uso do autolink também é perfeito para mim, visualização de texto simples sem os pais.
euther

2
android: autoLink também funciona muito bem para vincular números de telefone, endereços e endereços de email (ou todos os itens acima).
CloudyMusic 23/03

54
Não, não é, porque esta resposta não funciona se você querer usar uma marca de âncora com um texto diferente de exibição do URL
cprcrack

375

Depois de passar algum tempo com isso, descobri que:

  • android:autoLink="web"funciona se você tiver links completos no seu HTML. O seguinte será destacado em azul e clicável:
  • Algum texto <a href="http://www.google.com">http://www.google.com</a>
  • Algum texto http://www.google.com
  • view.setMovementMethod(LinkMovementMethod.getInstance()); funcionará com o seguinte (será destacado e clicável):
  • Algum texto <a href="http://www.google.com">http://www.google.com</a>
  • Algum texto http://www.google.com
  • Algum texto <a href="http://www.google.com">Go to Google</a>

Observe que a terceira opção possui um hiperlink, mas a descrição do link (a parte entre as tags) em si não é um link. android:autoLink="web"se não trabalhar com tais ligações.

  • android:autoLink="web"se definido em XML será substituído view.setMovementMethod(LinkMovementMethod.getInstance());(ou seja, links do terceiro tipo serão destacados, mas não clicáveis).

A moral da história é usada view.setMovementMethod(LinkMovementMethod.getInstance());no seu código e verifique se você não tem android:autoLink="web"no layout XML se quiser que todos os links sejam clicáveis.


setMovementMethod não funciona com a segunda opção que você mencionou, ou seja, google.com ... alguma atualização?
Darpan

16
Obrigado por apontar que <a href="http://www.google.com">Go to Google</a>não funcionará no autoLink. Para tantas respostas no SO, este é o único que o mencionou. Obrigado!
cwhsu

Este funciona. Testado na API 29.
Wrichik Basu

96

As soluções acima não funcionaram para mim, mas o seguinte funcionou (e parece um pouco mais limpo).
Primeiro, no recurso de string, defina suas divisões de abertura de tag usando a codificação de entidade HTML, ou seja:

&lt;a href="http://www.google.com">Google&lt;/a>

e não:

<a href="http://www.google.com">Google</a>

Em geral, codifique todas as divisas na string dessa maneira. BTW, o link deve começar comhttp://

Em seguida (conforme sugerido aqui ), defina esta opção no seu TextView:

 android:linksClickable="true"

Finalmente, no código, faça:

((TextView) findViewById(R.id.your_text_view)).setMovementMethod(LinkMovementMethod.getInstance());
((TextView) findViewById(R.id.your_text_view)).setText(Html.fromHtml(getResources().getString(R.string.string_with_links)));

É isso, sem regexes ou outros hacks manuais necessários.


7
Isso criará um analisador de HTML sempre que esse código for executado. Esteja ciente de que, se você usar isso para criar links dentro de um item da lista ou em outros locais críticos de desempenho em seu aplicativo. Durante a criação de um listitem isso aumenta o tempo de execução dos meus métodos GetView off de 50%
Janusz

1
Também espaços de nota no URL deve ser substituído por%20
Nicolas Tyler

Você pode evitar os problemas de codificação da entidade envolvendo sua string na <![CDATA[ ... ]]>tag.
Paul Lammertsma

1
Funciona para mim, obrigado. Não está trabalhando com <![CDATA[...]]>tag.
Ricky.tribbia 19/10/2015

Essa deve ser a resposta! Funcionou perfeitamente bem com o meu aplicativo nativo
Ajay Kulkarni

69

eu usei isso simplesmente

Linkify.addLinks(TextView, Linkify.ALL);

torna os links clicáveis ​​dados aqui


4
Esta resposta é a melhor. Funciona em todas as versões do Android e só precisamos adicionar esse método quando o texto estiver definido no TextView. Bônus: ele nos permite adicionar links personalizados clickable
Kerwan

3
Resposta realmente mais simples e melhor. funciona para email / web ao mesmo tempo .... obrigado cara !!!
Imran Ahmed

1
Use LinkifyCompat se precisar de alguns dos recursos avançados mais recentes
Vaiden

Bom, faz urls sem <a href...clickable
Pavel

Ele também faz todas as tags "HTML" no interior trabalho nesse sentido, por exemplo, <b> ... </ b> etc.
Matriz

67

Se você deseja adicionar um link semelhante ao HTML, tudo que você precisa fazer é:

  • adicione uma string semelhante a HTML de recurso:

     <string name="link"><a href="https://www.google.pl/">Google</a></string>
  • adicione sua visualização ao layout sem nenhuma configuração específica de link:

     <TextView
        android:id="@+id/link"
        android:text="@string/link" />`
  • adicione MovementMethod apropriado programaticamente ao seu TextView:

     mLink = (TextView) findViewById(R.id.link);
     if (mLink != null) {
       mLink.setMovementMethod(LinkMovementMethod.getInstance());
     }

É isso aí! E sim, ter opções como "autoLink" e "linksClickable" trabalhando apenas em links explícitos (não agrupados em tags html) também é muito enganador para mim ...


2
+1 Você está certo. Deveria haver uma opção para inserir um padrão para que ele corresponda. Dessa forma, é bem idiota.
Schlingel

47

Adicionei esta linha ao TextView: android:autoLink="web"
Abaixo está um exemplo de uso em um arquivo de layout.

layout.xml amostra

    <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/txtDefaultpassword"
        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" />

string.xml

<string name="lostpassword">If you lost your password please contact <a href="mailto:support@cleverfinger.com.au?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>

36

O seguinte deve funcionar para quem procura uma combinação de texto e hiperlink em um aplicativo Android.

Em string.xml:

<string name="applink">Looking for Digital Visiting card? 
<a href="https://play.google.com/store/apps/details?id=com.themarkwebs.govcard">Get it here</a>
</string>

Agora você pode utilizá-lo stringde qualquer forma Viewcomo esta:

<TextView
    android:id="@+id/getapp"
    android:layout_width="match_parent"
    android:layout_height="50dp"
    android:gravity="center"
    android:textColor="@color/main_color_grey_600"
    android:textSize="15sp"
    android:text="@string/applink"/>

Agora, na sua Atividade ou Fragmento, faça o seguinte:

TextView getapp =(TextView) findViewById(R.id.getapp);
getapp.setMovementMethod(LinkMovementMethod.getInstance());

Até agora, você não precisa definir android:autoLink="web"ou android:linksClickable="true"usar essa abordagem.

Espero que você ache isso útil.


Isso funciona bem, mas quando você volta da Web aberta, feche apenas o navegador, mas não volte ao aplicativo.
Jachumbelechao Para Mantekilla

27

Eu espero que isso te ajude;

String value = "<html>Visit my blog <a href=\"http://www.maxartists.com\">mysite</a> View <a href=\"sherif-activity://myactivity?author=sherif&nick=king\">myactivity</a> callback</html>";
    TextView text = (TextView) findViewById(R.id.text);


    text.setText(Html.fromHtml(value));
    text.setMovementMethod(LinkMovementMethod.getInstance());

3
Isso funciona muito bem. Verifique também se você remove android:autoLink=?do seu TextView.
Sulai

Isto é o que finalmente funcionou para mim. HTML válido e não usar android:autoLink=?é importante!
Neal Sanche #

Para Xamarin, a palavra shows, mas não está sublinhado e não pode ser clicado usando os apresentados anteriormente não estes parâmetros: AutoLink, linksClickable
maxweber

Para o Xamarin, defini-las e definir Text ou TextFormatted também produz a palavra, mas não é clicável nem azul / sublinhada. A remoção do autoLink também falha. A remoção apenas de linksClickable também falha. A remoção de ambos também falha.
Max1

helloWorld.TextFormatted = Html.FromHtml (linkURL); com e sem aqueles também falha. (não vinculados, não azul, não pode ser clicado)
maxweber

25

Apenas o que você precisa adicionar na exibição de texto em xml

<TextView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:autoLink="web"/>

24

A coisa mais fácil que funcionou para mim é usar o Linkify

TextView txt_Message = (TextView) view.findViewById(R.id.txt_message);
txt_Message.setText("This is link https://www.google.co.in/");
Linkify.addLinks(txt_Message, Linkify.WEB_URLS);

e ele detectará automaticamente os URLs da Web do texto na visualização de texto.


Verdade, mas eles não serão clicáveis.
FractalBob

Os links são clicáveis.
Octavian Ionel

19

Richard, da próxima vez, você deve adicionar esse código em TextView no XML do layout.

android:autoLink="all"

Isso deve ser assim.

<TextView 
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" 
    android:text="@string/txtCredits"
    android:id="@+id/infoTxtCredits"
    android:autoLink="all"
    android:linksClickable="true">
</TextView>

Você não precisa usar esse código ( t2.setMovementMethod(LinkMovementMethod.getInstance());) para tornar o link clicável.

Além disso, eis a verdade: desde que você defina o autoLink e o linksClickable , não se esqueça de adicioná-lo no arquivo String.xml para que o link clicável funcione.

<string name="txtCredits"><a href="http://www.google.com">Google</a></string>

3
Não funciona para mim. O link é realmente clicável, mas a string inteira é exibida, não apenas o "Google". De fato, nenhuma das respostas aqui ou sua combinação funciona até agora.
Girafa Violeta

O seu dispositivo ou emulador está ativado na Internet e defina-o como LIGADO (wifi) ou com a LAN conectada, @Violet Giraffe?
David Dimalanta

Isto é. Eu nunca consegui tornar os links clicáveis ​​usando apenas atributos XML, tive que recorrer ao código Java para isso. O que não é grande coisa, mas não é legal.
Violet Giraffe

18

usando o linkify : o Linkify pega um pedaço de texto e uma expressão regular e transforma todas as correspondências de expressão regular no texto em links clicáveis

TextView textView = (TextView) findViewById(R.id.textView);
textView.setText("http://www.domain.com");
Linkify.addLinks(textView, Linkify.WEB_URLS);

Não esqueça de

import android.widget.TextView;

16

Aqui está um código android de uma linha para tornar o telefone e o URL selecionáveis ​​no textView, independentemente do que é string e do que são dados. Você não precisa usar nenhuma tag HTML para isso.

TextView textView = (TextView)findViewById(R.id.textView1);
textView.setText("some url is www.google.com phone 7504567890 another url lkgndflg.com ");

// Makes the textView's Phone and URL (hyperlink) select and go.
Linkify.addLinks(textView, Linkify.WEB_URLS | Linkify.PHONE_NUMBERS);

13

Notei que usando android:autoLink="web"assim

<TextView
    android:layout_width="match_parent"
    android:layout_height="wrap_content" 
    android:autoLink="web"/>

funcionou bem para URLs, mas como eu tinha um endereço de e-mail e um número de telefone que também queria vincular, acabei usando esta linha android:autoLink="all"como esta

<TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content" 
        android:autoLink="all"/>

e funcionou perfeitamente.


13

Gerenciar Linkify texto em cores também insira a descrição da imagem aqui

tv_customer_care_no.setLinkTextColor(getResources().getColor(R.color.blue));
  tv_customer_care_no.setText("For us to reach out to you, please fill the details below or contact our customer care at  18004190899 or visit our website http://www.dupont.co.in/corporate-links/contact-dupont.html ");
   Linkify.addLinks(tv_customer_care_no, Linkify.WEB_URLS | Linkify.PHONE_NUMBERS);
   Linkify.addLinks(tv_customer_care_no, Linkify.ALL );

11

Certifique-se de não usar setAutoLinkMask(Linkify.ALL)ao usar setMovementMethod(LinkMovementMethod.getInstance())e Html.fromHTML()em HTMLlinks formatados corretamente (por exemplo, <a href="http://www.google.com/">Google</a>).


10

Usa isto...

TextView.setOnClickListener(new OnClickListener() {

                    @Override
                    public void onClick(View v) {
                        // TODO Auto-generated method stub
                        Intent in=new Intent(Intent.ACTION_VIEW,Uri.parse("http://www.twitter.com/"));
                        startActivity(in);
                    }

                });

e adicione permissão no arquivo de manifesto

<uses-permission android:name="android.permission.INTERNET"/>

1
Isso funcionará, mas lembre-se de que o aplicativo pode não precisar de permissão da Internet além desse TextView clicável. Talvez um exagero nesses casos
Jose_GD

2
Isso realmente se relaciona com a pergunta?
Darpan 13/03/2015

2
Isso não foi relevante para a questão.
afollestad

1
Isso nunca falhará!
Skynet

Eu gosto desse método, pois permite exibir apenas o texto âncora em vez do URL completo. O texto âncora também pode ser estilizado, por exemplo, colorido em verde e sublinhado.
bebê perdido

10

Você precisa apenas disso:

android:autoLink="web"

Insira esta linha no TextView, que pode ser clicável com referência à Web. Endereço de URL definido como um texto deste TextView.

Exemplo:

 <TextView
    android:id="@+id/textViewWikiURL"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textSize="20sp"
    android:textStyle="bold"
    android:text="http://www.wikipedia.org/"
    android:autoLink="web" />

10

A resposta aceita está correta, MAS significa que números de telefone, mapas, endereços de email e links regulares, por exemplo, http://google.com sem tags href, NÃO serão mais clicáveis, pois você não pode ter um vínculo automático no xml.

A única solução completa para ter TUDO clicável que eu encontrei é o seguinte:

Spanned text = Html.fromHtml(myString);
URLSpan[] currentSpans = text.getSpans(0, text.length(), URLSpan.class);
SpannableString buffer = new SpannableString(text);
Linkify.addLinks(buffer, Linkify.ALL);
for (URLSpan span : currentSpans) {
    int end = text.getSpanEnd(span);
    int start = text.getSpanStart(span);
    buffer.setSpan(span, start, end, 0);
}
textView.setText(buffer);
textView.setMovementMethod(LinkMovementMethod.getInstance());

E o TextView NÃO deve ter android:autolink. Também não há necessidade android:linksClickable="true"; é verdade por padrão.


para mim, funcionou sem isso, a resposta aceita funcionou bem @Kelly, você pode dizer a versão e o dispositivo Android em que obteve o problema?
Akhil Dad

Não funciona para myapp://esquemas (para Deep Linking).
CoolMind 13/03

7

Foi assim que resolvi links clicáveis ​​e visíveis em um TextView (por código)

private void setAsLink(TextView view, String url){
        Pattern pattern = Pattern.compile(url);
        Linkify.addLinks(view, pattern, "http://");
        view.setText(Html.fromHtml("<a href='http://"+url+"'>http://"+url+"</a>"));
    }

mas gostaria de ver o texto e, ao clicar no texto, ele é redirecionado para o link (aberto pelo navegador)? Esta solução não resolve isso, resolve?
Duc Tran

6

Use o código abaixo:

String html = "<a href=\"http://yourdomain.com\">Your Domain Name</a>"
TextView textview = (TextView) findViewById(R.id.your_textview_id);
textview.setMovementMethod(LinkMovementMethod.getInstance());
textview.setText(Html.fromHtml(html));

6

[Tested in Pre-lollipop as well as in Lollipop and above]

Você pode obter sua string HTML no back-end ou nos arquivos de recursos. Se você colocar o texto como uma sequência de recursos, adicione a CDATAtag:

<string name="your_text">![CDATA[...<a href="your_link">Link Title</a>  ...]]</string>

Em seguida, no código, você precisa obter a string e atribuí-la como HTML e definir um método de movimento de link:

String yourText = getString(R.string.your_text);

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
   textView.setText(Html.fromHtml(yourText, Html.FROM_HTML_MODE_COMPACT));
} else {
   textView.setText(Html.fromHtml(yourText));
}

try {
   subtext.setMovementMethod(LinkMovementMethod.getInstance());
} catch (Exception e) {
   //This code seems to crash in some Samsung devices.
   //You can handle this edge case base on your needs.
}

5

O motivo pelo qual você está tendo o problema é que ele apenas tenta corresponder endereços "nus". coisas como "www.google.com" ou " http://www.google.com ".

A execução de seu texto através de Html.fromHtml () deve ser suficiente . Você precisa fazer isso programaticamente, mas funciona.


2
Os links no TextView são de cores diferentes dos outros textos da string, então acho que estão sendo reconhecidos como links. Eles simplesmente não são clicáveis ​​:-(
Richard

4

Não sei se vale a pena adicionar outra resposta, mas por precaução ...

Eu tive que caçar isso em alguns lugares, mas finalmente consegui que esta versão do código funcionasse.

strings.xml:

<string name="name1">&lt;a href="http://www.google.com">link text1&lt;/a></string>
<string name="name2">&lt;a href="http://www.google.com">link text2&lt;/a></string>

myactivity.xml:

<TextView 
    android:id="@+id/textview1"
    android:layout_height="wrap_content"
    android:layout_width="wrap_content"
    android:layout_marginTop="5dp" />

<TextView 
    android:id="@+id/textview2"
    android:layout_height="wrap_content"
    android:layout_width="wrap_content"
    android:layout_marginTop="5dp" />

myactivty.java (em onCreate ()):

TextView tv1 = (TextView)findViewById(R.id.textview1);
TextView tv2 = (TextView)findViewById(R.id.textview2);

tv1.setText(Html.fromHtml(getResources().getString(R.string.name1)));
tv2.setText(Html.fromHtml(getResources().getString(R.string.name2)));
tv1.setMovementMethod(LinkMovementMethod.getInstance());
tv2.setMovementMethod(LinkMovementMethod.getInstance());

Isso criará dois hiperlinks clicáveis ​​com o texto link text1e link text2redirecionará o usuário para o google.


4

O telefone Autolink não funciona para mim. O seguinte funcionou como um encanto,

TextView tv = (TextView) findViewById(R.id.emergencynos);
String html2="<br><br>Fire - <b><a href=tel:997>997</a> </b></br></br>";        
tv.append(Html.fromHtml(html2));
tv.setMovementMethod(LinkMovementMethod.getInstance());

4

Se você estiver usando o TextView baseado em XML, para sua exigência, precisará fazer apenas duas coisas:

  1. Identifique seu link na string, como "esta é minha página da Web". Você pode adicioná-lo em xml ou no código.

  2. No xml que possui o TextView, adicione estes:


android:linksClickable="true"

android:autoLink="web"

4

Adicione CDATA ao seu recurso de sequência

Strings.xml

<string name="txtCredits"><![CDATA[<a href=\"http://www.google.com\">Google</a>]]></string>

3

Eu uso o link automático para "sublinhar automaticamente" o texto, mas acabei de criar um "onClick" que o gerencia. (Eu me deparei com esse problema)

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginRight="10dp"
            android:textSize="18dp"
            android:autoLink="all"
            android:text="@string/twitter"
            android:onClick="twitter"/>

public void twitter (View view)
    {
        try
        {
            Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://twitter.com/onaclovtech"));
            startActivity(browserIntent);

        }
        finally
        {
        }
    }

Não requer nenhuma permissão, pois você está passando a intenção para aplicativos que gerenciam esses recursos (navegador do IE).

Foi isso que funcionou para mim. Boa sorte.


Você não está criando um link clicável, apenas colocando o TextView inteiro clicável ... Essa não é a questão.
precisa saber é

Concordado, mas às vezes uma solução alternativa que funciona, é a mesma coisa. Claramente 5 anos após a resposta mais popular ter sido escrita, isso ainda era um problema, e já faz 6 meses que eu tive o mesmo problema, mas acabei com uma solução diferente, mas funcional.
usar o seguinte comando

2

Só perdi tanto tempo para descobrir que você precisa usar getText (R.string.whatever) em vez de getString (R.string.whatever) ...

Enfim, aqui está como eu consegui o meu trabalho. Com vários hiperlinks na mesma exibição de texto também.

    TextView termsTextView = (TextView) getActivity().findViewById(R.id.termsTextView);
    termsTextView.append("By registering your account, you agree to our ");
    termsTextView.append(getText(R.string.terms_of_service));
    termsTextView.append(", ");
    termsTextView.append(getText(R.string.fees));
    termsTextView.append(", and the ");
    termsTextView.append(getText(R.string.stripe_connected_account_agreement));

    termsTextView.setMovementMethod(LinkMovementMethod.getInstance());



            <TextView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:id="@+id/termsTextView"/>

exemplo de string

    <string name="stripe_connected_account_agreement"><a href="https://stripe.com/connect/account-terms">Stripe Connected Account Agreement</a></string>

Isso é muito mais direto e fácil de usar. Eu tenho vários links com texto personalizado trabalhando em um TextView adicionado dinamicamente por causa disso. Isso precisa do máximo de votos possíveis. Estive quebrando minha cabeça sobre seqüências estendidas, métodos personalizados TextViews e HtmlCompat.fromHtml. Muito obrigado @ luca992.
precisa
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.