Come rendere selezionabili i collegamenti in un TextView?


1004

Ho definito il seguente TextView:

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

dove @string/txtCreditsè una risorsa stringa che contiene<a href="some site">Link text</a> .

Android sta evidenziando i collegamenti in TextView, ma non rispondono ai clic. Qualcuno può dirmi cosa sto facendo di sbagliato? Devo impostare un onClickListener per TextView nella mia attività per qualcosa di così semplice?

Sembra che abbia a che fare con il modo in cui definisco la mia risorsa stringa. Questo non funziona:

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

Ma questo fa:

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

Il che è un peccato perché preferirei di gran lunga mostrare un collegamento di testo piuttosto che mostrare l'URL completo.


67
android: autoLink = "web" questa è la linea principale che deve essere aggiunta a xml e funziona come un incantesimo. grazie
@Richard

1
<string name = "txtCredits"> <a href=" google.com"> www.google.com </a> </ string > usa la stringa sopra e funziona. Si è appreso che la stringa in href e con in anchor tag deve essere la stessa e avere .com o. * Per funzionare è necessario verificare il perché
Shaik Khader

<string name = "txtCredits"> Alcuni testi qui <a href=" google.com"> Google </a> </ string > Per lo snippet sopra Fare clic su Alcuni testi qui non dovrebbero funzionare nel mio caso cosa devo fare?
Ajay Takur,


android:focusable="true"risolto il mio problema
Khang .NT

Risposte:


1228

Sepolto nelle demo API, ho trovato la soluzione al mio 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());

Ho rimosso la maggior parte degli attributi sul mio TextView per abbinare ciò che era nella demo.

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

Ciò ha risolto. Abbastanza difficile da scoprire e correggere.

Importante : non dimenticare di rimuovere autoLink="web"se stai chiamando setMovementMethod().


19
Forse sono solo io, ma perché mai dovresti farlo con un EditText?
Justin

1
Si scopre che solo setMovementMethod è necessario per raggiungere l'obiettivo.
superarts.org

3
Proprio come un commento, ho visto un Samsung Galaxy S3 con OS 4.3 che si arrestava in modo anomalo quando si utilizza "setMovementMethod (LinkMovementMethod.getInstance ())", quindi basta tenerne conto, ho dovuto creare una convalida prima di aggiungerlo
Jorge Aguilar

40
Anch'io. Se si chiama setMovementMethod (), è necessario rimuovere autolink = "web" nel file XML, altrimenti il ​​collegamento non funzionerà. Grazie per il commento
voghDev

6
Usa semplicemente l'attributo "autoLink" nel tuo XML per es. Android: autoLink = "web"
Kalpesh

533

Sto solo usando android:autoLink="web" e funziona benissimo. Un clic sul collegamento apre il browser e mostra la pagina corretta.

Una cosa che potrei immaginare è che un'altra vista è sopra il link. Qualcosa che è trasparente riempie l'intero genitore ma non mostra nulla sopra il collegamento. In questo caso il clic passa a questa vista anziché al collegamento.


3
Aggiunte ulteriori informazioni sopra. Potrebbe essere il modo in cui sto definendo la stringa come <string name = "txtCredits"> <a href=" google.com"> Google </a> </ string >? Sembra che questo sia permesso ma non funziona per me.
Richard,

6
se usi linkify auto non hai bisogno della parte a href. Il sistema operativo prenderà la stringa analizzandola per gli URL e converte ogni URL in un link cliccabile. Ma ciò non comporterà che la parola google sia collegata a google.com. Visualizzerebbe www.google.com come collegamento.
Janusz,

l'uso del collegamento automatico funziona perfettamente anche per me, semplice visualizzazione di testo senza genitori.
Euther,

2
android: autoLink funziona egregiamente anche per collegare numeri di telefono, indirizzi e indirizzi e-mail (o tutto quanto sopra).
CloudyMusic il

54
No, perché questa risposta non funziona se non si desidera utilizzare un tag di ancoraggio con un testo di visualizzazione diverso dall'URL
cprcrack

375

Dopo aver trascorso un po 'di tempo con questo, ho scoperto che:

  • android:autoLink="web"funziona se hai collegamenti completi nel tuo HTML. Di seguito verranno evidenziati in blu e selezionabili:
  • Del testo <a href="http://www.google.com">http://www.google.com</a>
  • Del testo http://www.google.com
  • view.setMovementMethod(LinkMovementMethod.getInstance()); funzionerà con quanto segue (sarà evidenziato e cliccabile):
  • Del testo <a href="http://www.google.com">http://www.google.com</a>
  • Del testo http://www.google.com
  • Del testo <a href="http://www.google.com">Go to Google</a>

Si noti che la terza opzione ha un collegamento ipertestuale, ma la descrizione del collegamento (la parte tra i tag) stessa non è un collegamento. android:autoLink="web"non non funziona con tali collegamenti.

  • android:autoLink="web"se impostato in XML avrà la precedenza view.setMovementMethod(LinkMovementMethod.getInstance());(ovvero, i collegamenti del terzo tipo verranno evidenziati, ma non selezionabili).

La morale della storia è l'uso view.setMovementMethod(LinkMovementMethod.getInstance());nel tuo codice e assicurati di non avere android:autoLink="web"nel tuo layout XML se vuoi che tutti i link siano cliccabili.


setMovementMethod non funziona con la seconda opzione che hai citato, ad esempio google.com .. qualche aggiornamento?
Darpan,

16
Grazie per aver sottolineato che <a href="http://www.google.com">Go to Google</a>non funzionerà per AutoLink. Per così tante risposte su SO, questa è l'unica che l'ha menzionata. Grazie!
cwhsu,

Questo funziona. Testato su API 29.
Wrichik Basu

96

Le soluzioni di cui sopra non hanno funzionato per me, ma quanto segue (e sembra un po 'più pulito).
Innanzitutto, nella risorsa stringa, definire il tag che apre i galloni utilizzando la codifica dell'entità HTML, ovvero:

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

e non:

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

In generale, codifica tutti i chevron nella stringa in questo modo. A proposito, il collegamento deve iniziare conhttp://

Quindi (come suggerito qui ) imposta questa opzione su TextView:

 android:linksClickable="true"

Infine, nel codice, esegui:

((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)));

Ecco fatto, non sono necessarie regex o altri hack manuali.


7
Ciò creerà un parser HTML ogni volta che viene eseguito questo codice. Tieni presente che se lo usi per creare collegamenti all'interno di un elemento dell'elenco o in altri luoghi critici per le prestazioni della tua app. Durante la creazione di un elenco, questo aumenta del 50% i tempi di esecuzione dei miei metodi getView
Janusz,

1
Si noti inoltre che gli spazi nell'URL devono essere sostituiti con%20
Nicolas Tyler,

È possibile evitare i problemi di codifica dell'entità avvolgendo la stringa nel <![CDATA[ ... ]]>tag.
Paul Lammertsma,

1
FUNZIONA per me, grazie. Non funziona con il <![CDATA[...]]>tag.
ricky.tribbia,

Questa dovrebbe essere la risposta! Ha funzionato perfettamente con la mia app nativa
Ajay Kulkarni il

69

l'ho usato semplicemente

Linkify.addLinks(TextView, Linkify.ALL);

rende i link cliccabili indicati qui


4
Questa risposta è la migliore. Funziona su ogni versione di Android e dobbiamo solo aggiungere quel metodo quando il testo è impostato in TextView. Bonus: ci consente di aggiungere collegamenti personalizzabili cliccabili
Kerwan

3
Risposta davvero più semplice e migliore. funziona per e-mail / web allo stesso tempo .... grazie amico !!!
Imran Ahmed,

1
Usa LinkifyCompat se hai bisogno di alcune delle più recenti funzionalità avanzate
Vaiden

Bene, crea URL senza <a href...clic
Pavel,

Inoltre, fa funzionare di conseguenza tutti i tag "html" all'interno, ad es. <b> ... </b> ecc.
Array

67

Se vuoi aggiungere un link simile a HTML, tutto ciò che devi fare è:

  • aggiungi una stringa di tipo HTML di risorsa:

     <string name="link"><a href="https://www.google.pl/">Google</a></string>
  • aggiungi la tua vista al layout senza alcuna configurazione specifica del link:

     <TextView
        android:id="@+id/link"
        android:text="@string/link" />`
  • aggiungi il MovementMethod appropriato a livello di codice al tuo TextView:

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

Questo è tutto! E sì, avere opzioni come "autoLink" e "linksClickable" che funzionano solo su link espliciti (non racchiusi in tag html) è molto fuorviante anche per me ...


2
+1 Hai ragione. Dovrebbe esserci un'opzione per inserire un modello te stesso in modo che questo sia abbinato. In questo modo è piuttosto stupido.
schlingel,

47

Ho aggiunto questa riga a TextView: android:autoLink="web"
Di seguito è riportato un esempio di utilizzo in un file di layout.

layout.xml campione

    <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

Quanto segue dovrebbe funzionare per chiunque cerchi una combinazione di testo e collegamento ipertestuale all'interno di un'app Android.

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

Ora puoi utilizzarlo stringin qualsiasi dato Viewcome questo:

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

Ora, nella tua attività o frammento, procedi come segue:

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

Ormai, non è necessario impostare android:autoLink="web"oandroid:linksClickable="true" utilizzare questo approccio.

Spero che lo troverai utile.


Funziona bene, ma quando torni indietro dal Web aperto, chiudi solo il browser, ma non ritorna all'app.
Jachumbelechao Unto Mantekilla

27

Spero che questo ti possa aiutare;

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
Funziona benissimo. Assicurati anche di rimuovere android:autoLink=?dal tuo TextView.
Sulai,

Questo è ciò che alla fine ha funzionato per me. HTML valido e non utilizzo android:autoLink=?è importante!
Neal Sanche,

Per Xamarin, la parola indica ma non è sottolineata e non è possibile fare clic utilizzando i parametri precedenti e NON questi: autoLink, linksClickable
maxweber

Per Xamarin l'impostazione e l'impostazione Text o l'impostazione TextFormatted restituiscono anche la parola ma non è selezionabile né blu / sottolineata. Anche la rimozione del collegamento automatico non riesce. Rimozione solo dei collegamenti Anche Clickable ha esito negativo. Anche la rimozione di entrambi non riesce.
maxweber,

helloWorld.TextFormatted = Html.FromHtml (linkURL); anche con e senza quelli fallisce. (non collegato, non blu, non è possibile fare clic)
maxweber

25

Solo ciò di cui hai bisogno per aggiungere questo nella vista di testo in XML

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

24

La cosa più semplice che ha funzionato per me è usare 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 rileverà automaticamente gli URL web dal testo nella visualizzazione di testo.


Vero, ma non saranno cliccabili.
FractalBob

I collegamenti sono cliccabili.
Ottaviano Ionel,

19

Richard, la prossima volta dovresti invece aggiungere questo codice sotto TextView al layout XML.

android:autoLink="all"

Questo dovrebbe essere così.

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

Non è necessario utilizzare questo codice ( t2.setMovementMethod(LinkMovementMethod.getInstance());) per rendere selezionabile il collegamento.

Inoltre, ecco la verità: fintanto che imposti autoLink e linksClickable , non dimenticare di aggiungere questo nel file String.xml in modo che il link cliccabile funzioni.

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

3
Non funziona per me. Il link è effettivamente cliccabile, ma viene visualizzata l'intera stringa, non solo "Google". In effetti, nessuna delle risposte qui o una loro combinazione funziona finora.
Violet Giraffe

Il tuo dispositivo o emulatore Internet è abilitato e impostato su ON (wifi) o la LAN è connessa, @Violet Giraffe?
David Dimalanta,

È. Non sono mai riuscito a rendere i link cliccabili usando solo gli attributi XML, per questo ho dovuto ricorrere al codice Java. Il che non è un grosso problema, ma non è carino.
Violet Giraffe

18

usando linkify : Linkify prende un pezzo di testo e un'espressione regolare e trasforma tutte le corrispondenze regex nel testo in collegamenti cliccabili

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

Non dimenticare di

import android.widget.TextView;

16

Ecco un codice Android a una riga per rendere il telefono e l'URL selezionabili da textView indipendentemente da cosa sia stringa e quali siano i dati. Non è necessario utilizzare alcun tag HTML per questo.

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

Ho notato che usando android:autoLink="web"così

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

ha funzionato bene per gli URL ma dato che avevo un indirizzo e-mail e un numero di telefono che volevo collegare anch'io, ho finito per usare questa linea in android:autoLink="all"questo modo

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

e ha funzionato come un fascino.


13

Gestisci Linkify testo Colore anche inserisci qui la descrizione dell'immagine

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

Assicurarsi di non utilizzare setAutoLinkMask(Linkify.ALL)quando si utilizzano setMovementMethod(LinkMovementMethod.getInstance())e Html.fromHTML()su HTMLcollegamenti correttamente formattati (ad esempio, <a href="http://www.google.com/">Google</a>).


10

Usa questo...

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 aggiungere l'autorizzazione nel file manifest

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

1
Funzionerà, ma tieni presente che l'app potrebbe non aver bisogno dell'autorizzazione Internet oltre a questo TextView cliccabile. Forse eccessivo in quei casi
Jose_GD

2
Si collega davvero alla domanda?
Darpan,

2
Questo non era rilevante per la domanda.
afollestad,

1
Questo non fallirà mai!
Skynet,

Mi piace questo metodo in quanto ci consente di mostrare solo il testo di ancoraggio anziché l'URL completo. Il testo di ancoraggio può anche essere in stile, ad esempio, colorato in verde e sottolineato.
perso il bambino il

10

Hai solo bisogno di questo:

android:autoLink="web"

Inserisci questa riga in TextView, che può essere cliccabile con riferimento al web. Indirizzo URL impostato come testo di questo TextView.

Esempio:

 <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

La risposta accettata è corretta, MA significherà che numeri di telefono, mappe, indirizzi e-mail e collegamenti regolari, ad es. http://google.comSenza tag href, NON POSSONO ESSERE PIÙ cliccabili poiché non è possibile avere il collegamento automatico in XML.

L'unica soluzione completa per avere TUTTO cliccabile che ho trovato è la seguente:

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 TextView NON dovrebbe avere android:autolink. Non è necessario android:linksClickable="true"neanche; è vero per impostazione predefinita.


per me ha funzionato senza questo, la risposta accettata ha funzionato bene @Kelly puoi dire la versione Android e il dispositivo su cui hai riscontrato il problema?
Akhil Dad,

Non funziona per gli myapp://schemi (per Deep Linking).
CoolMind

7

Ecco come ho risolto i link cliccabili e visibili in un TextView (per codice)

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>"));
    }

ma mi piacerebbe vedere il testo e quando si fa clic sul testo reindirizza al collegamento (aperto dal browser)? Questa soluzione non lo risolve, vero?
Duc Tran,

6

Usa sotto il codice:

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]

È possibile ottenere la stringa HTML dal back-end o dai file delle risorse. Se inserisci il testo come stringa di risorse, assicurati di aggiungere il CDATAtag:

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

Quindi nel codice è necessario ottenere la stringa e assegnarla come HTML e impostare un metodo di spostamento dei collegamenti:

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

Il motivo per cui stai riscontrando il problema è che cerca solo di abbinare indirizzi "nudi". cose come "www.google.com" o " http://www.google.com ".

Eseguire il tuo testo attraverso Html.fromHtml () dovrebbe fare il trucco. Devi farlo programmaticamente, ma funziona.


2
I collegamenti in TextView hanno un colore diverso rispetto agli altri testi nella stringa, quindi penso che vengano riconosciuti come collegamenti. Non sono cliccabili :-(
Richard

4

Non so se vale la pena aggiungere un'altra risposta, ma per ogni evenienza ...

Ho dovuto dare la caccia in un paio di punti, ma alla fine ho fatto funzionare questa versione del codice.

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 (in 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());

Ciò creerà due collegamenti ipertestuali selezionabili con il testo link text1e link text2che reindirizzeranno l'utente a google.


4

Il telefono con autolink non ha funzionato per me. Il seguente ha funzionato come un incantesimo,

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 si utilizza TextView basato su XML, per le proprie esigenze è necessario fare solo due cose:

  1. Identifica il tuo link nella stringa, come "this is my WebPage". Puoi aggiungerlo in XML o nel codice.

  2. Nel file XML con TextView, aggiungi questi:


android:linksClickable="true"

android:autoLink="web"

4

Aggiungi CDATA alla tua risorsa stringa

strings.xml

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

3

Uso il collegamento automatico per "sottolineare automaticamente" il testo, ma ho appena creato un "onClick" che lo gestisce. (Ho riscontrato questo problema da solo)

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

Non richiede alcuna autorizzazione, poiché stai passando l'intento alle app che gestiscono tali risorse (browser IE).

Questo è ciò che ha funzionato per me. In bocca al lupo.


Non stai creando un link su cui è possibile fare clic, stai semplicemente mettendo l'intero TextView su cui fare clic ... Non è questa la domanda.
Clauziere,

D'accordo, ma a volte una soluzione alternativa che funziona, è la stessa cosa. Chiaramente 5 anni dopo che la risposta più popolare è stata scritta, questo era ancora un problema, ed è stato 6 mesi che ho avuto lo stesso problema, ma ho finito con una soluzione diversa ma funzionante.
onaclov2000,

2

Ho perso così tanto tempo per capire che devi usare getText (R.string.whatever) invece di getString (R.string.whatever) ...

Comunque, ecco come ho fatto funzionare la mia. Con più collegamenti ipertestuali nella stessa vista di testo.

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

esempio di stringa

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

Questo è molto più semplice e facile da usare. Ho più collegamenti con testo personalizzato che funziona in un TextView aggiunto dinamicamente per questo. Ciò richiede il maggior numero possibile di voti. Mi sono rotto la testa su stringhe con spanning, TextViews personalizzati e metodi HtmlCompat.fromHtml. Grazie mille @ luca992.
Parth Patel,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.