Autore Topic: Intercettare click sui link di una TextView  (Letto 503 volte)

Offline capitancooker

  • Utente junior
  • **
  • Post: 119
  • Marco
  • Respect: +10
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Sistema operativo:
    macOS High Sierra
Intercettare click sui link di una TextView
« il: 20 Luglio 2017, 12:35:14 CEST »
0
Ho la necessità di visualizzare la definizione contenuta in un dizionario attraverso una dialogbox cliccando sulla relativa parola contenuta nella TextView.

Sono riuscito a creare i vari link sui termini ma l'unica soluzione che ho trovato avvia una nuova activity.
Vi mostro il codice di come inserisco il link per un singolo termine:

Codice (Java): [Seleziona]
        TextView textView = (TextView) findViewById(R.id.testo);

        textView.setText("In questo testo c'è un termine_da_mostrare")

        String termine = "termine_da_mostrare"
        String url = "com.example.myapp://show/" + termine;

        Linkify.TransformFilter filter = new Linkify.TransformFilter() {
            @Override
            public String transformUrl(Matcher match, String url) {
                return link;
            }
        };

        Linkify.addLinks(textView, Pattern.compile(patternToMatch, Pattern.CASE_INSENSITIVE), null, null, filter);

C'è un modo semplice per intercettare il click sul link così da utilizzare una dialog invece che un'activity?

Grazie in anticipo,
Marco
« Ultima modifica: 20 Luglio 2017, 12:37:43 CEST da capitancooker »
Se sbaglio, correggetemi.

Offline Ohmnibus

  • Utente senior
  • ****
  • Post: 804
  • Respect: +168
    • Github
    • Google+
    • @ohmnibus
    • Mostra profilo
    • Lords of Knowledge GdR
  • Dispositivo Android:
    Huawei P9 Lite
  • Play Store ID:
    Ohmnibus
  • Sistema operativo:
    Windows 10 x64
Re:Intercettare click sui link di una TextView
« Risposta #1 il: 20 Luglio 2017, 17:02:57 CEST »
0
Prova così:

Codice (Java): [Seleziona]
protected void makeLinkClickable(SpannableStringBuilder strBuilder, final URLSpan span)
{
    int start = strBuilder.getSpanStart(span);
    int end = strBuilder.getSpanEnd(span);
    int flags = strBuilder.getSpanFlags(span);
    ClickableSpan clickable = new ClickableSpan() {
        public void onClick(View view) {
            // Do something with span.getURL() to handle the link click...
        }
    };
    strBuilder.setSpan(clickable, start, end, flags);
    strBuilder.removeSpan(span);
}

protected void setTextViewHTML(TextView text, String html)
{
    CharSequence sequence = Html.fromHtml(html);
    SpannableStringBuilder strBuilder = new SpannableStringBuilder(sequence);
    URLSpan[] urls = strBuilder.getSpans(0, sequence.length(), URLSpan.class);  
    for(URLSpan span : urls) {
        makeLinkClickable(strBuilder, span);
    }
    text.setText(strBuilder);
    text.setMovementMethod(LinkMovementMethod.getInstance());      
}

Il codice è preso da questa risposta su stackoverflow: https://stackoverflow.com/a/19989677/466938
Ohmnibus
Le mie app su Play Store

È stata trovata una soluzione al tuo problema? Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato.

Offline capitancooker

  • Utente junior
  • **
  • Post: 119
  • Marco
  • Respect: +10
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Sistema operativo:
    macOS High Sierra
Re:Intercettare click sui link di una TextView
« Risposta #2 il: 21 Luglio 2017, 07:26:17 CEST »
0
Per ora ho sopperito modificando il tema dell'activity richiamata in dialog, la cosa più semplice ed immediata ed adatta allo scopo.
Ho comunque provato quanto mi hai riportato ma non sono riuscito ad adattarlo alla mia esigenza, così com'è sostituisce tutta la textView mentre a me serve un link su una o più parole del testo.
Grazie comunque,
Marco
Se sbaglio, correggetemi.