151 votes

gérer textview clic sur le lien dans mon application android

Je suis en train de rendu HTML d'entrée dans un TextView comme suit:

tv.setText(Html.fromHtml("<a href='test'>test</a>"));

Le code HTML affiché m'est fournie par une ressource externe, donc je ne peux pas changer les choses autour de que je, mais je peux, bien sûr, de faire des regex d'interférer avec le HTML, pour changer le href de la valeur, à dire, à quelque chose d'autre.

Ce que je veux, c'est être capable de gérer un lien, cliquez directement depuis l'application, plutôt que d'avoir le lien, ouvrez une fenêtre de navigateur. Est-ce réalisable? J'imagine qu'il serait possible de définir le protocole de le href de la valeur à quelque chose comme "myApp://", et puis de l'enregistrer quelque chose qui serait de laisser mon application poignée de ce protocole. Si c'est effectivement le meilleur moyen, je voudrais savoir comment c'est fait, mais j'espère que il ya un moyen plus facile de simplement dire, "lorsque le lien est cliqué dans ce textview, je veux déclencher un événement qui reçoit la valeur du href du lien en tant que paramètre d'entrée"

182voto

David Hedlund Points 66192

Venir à cela près d'un an plus tard, il y a une autre manière dans laquelle j'ai résolu mon problème en particulier. Depuis que j'ai voulu le lien pour être manipulé par ma propre app, il y a une solution qui est un peu plus simple.

En plus de l'intention de filtre, j'ai simplement laissé mon activité cible écoutez ACTION_VIEW d'intentions, et plus particulièrement ceux avec le régime d' com.package.name

<intent-filter>
    <category android:name="android.intent.category.DEFAULT" />
    <action android:name="android.intent.action.VIEW" />
    <data android:scheme="com.package.name" />  
</intent-filter>

Cela signifie que les liens commençant par com.package.name:// seront traitées par mon activité.

Donc, tout ce que j'ai à faire, c'est construire une URL qui contient les informations que je souhaite transmettre:

com.package.name://action-to-perform/id-that-might-be-needed/

Dans mon activité cible, je peux récupérer cette adresse:

Uri data = getIntent().getData();

Dans mon exemple, je pourrais simplement cocher data pour les valeurs null, parce que quand elle n'est pas nulle, je saurai qu'il a été appelé par l'intermédiaire d'un lien. À partir de là, j'ai extrait les instructions que j'ai besoin de l'url pour être en mesure d'afficher les données appropriées.

63voto

Jonathan S. Points 650

Une autre façon, emprunte un peu à Linkify mais vous permet d’adapter votre traitement.

Classe étendue personnalisée :

Fonction d’assistance :

Utilisation :

55voto

Arun Points 841

s’il y a plusieurs liens dans l’affichage de texte. Par exemple textview a « https:// » et « tel aucun » nous pouvons personnaliser les clics de méthode et poignée de LinkMovement de mots basées sur un modèle. La méthode de mouvement de lien personnalisé est jointe.

Cela doit être appelée depuis le textview de la manière suivante :

10voto

jonathan Points 77

son très simple ajoutez cette ligne dans votre code :

0voto

rohit mandiwal Points 4883

La meilleure façon que j’ai utilisé et il a toujours fonctionné pour moi

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X