2010-09-02 25 views
1

Est-il possible de lier un mot-clé dans un TextView à un fichier ou à un répertoire de la carte SD de l'utilisateur? Mon application produit des fichiers de trace de pile lorsqu'elle se bloque et je souhaite que l'utilisateur puisse cliquer sur un lien dans ma boîte de dialogue A propos de pour afficher le dernier ou le dossier contenant tous les fichiers. (Quelque chose comme "Si cette application se bloque, s'il vous plaît envoyer [lien] le dernier fichier stack.trace [/ link] à nous à [email protected]")Lier un mot-clé dans TextView au fichier/répertoire

Je sais qu'il est possible d'utiliser le code suivant pour créer un lien Web mais j'ai essayé de le modifier pour utiliser "file: ///sdcard/path/to/file/stack.trace", ce qui force mon application à forcer la fermeture lorsque le lien est cliqué.

<string name="strSample">This is Web link to &lt;a href=&quot;http://www.google.com&quot;>Google&lt;/a>!</string> 

final TextView tvSample = (TextView)findViewById(R.id.tvSample); 
tvSample.setMovementMethod(LinkMovementMethod.getInstance()); 
String strSample = getResources().getString(R.string.strSample); 
tvSample.setText(Html.fromHtml(strSample)); 

Répondre

0

Vous pouvez étendre votre méthode en remplaçant une partie Html.fromHtml(strSample) qui retourne Spannable. Créez votre propre Spannable et ajoutez-y ClickableSpan. Dans la méthode onClick, vous pouvez placer la logique dont vous avez besoin. Voici un exemple rapide que vous pouvez étendre

public Spannable getProfileLink(final Context context) { 
    final String name = firstName + " " + lastName; 
    Spannable spans = SpannableStringBuilder.valueOf(name); 
    ClickableSpan clickSpan = new ClickableSpan() { 
     @Override 
     public void onClick(View widget) { 
      // TODO - call profile here 
      Toast.makeText(context, "Will call profile", Toast.LENGTH_LONG); 
     } 

    }; 
    spans.setSpan(clickSpan, 0, name.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 
    return spans; 
} 
+0

Un grand merci! –