Existe-t-il un moyen simple de créer des liens personnalisés et de gérer leur comportement «au toucher» pour le composant Android TextView? Je n'ai trouvé aucune solution sur Internet, mais est venu avec le mien.TextView avec des liens personnalisés
0
A
Répondre
0
Il existe un moyen simple de créer des liens personnalisés pour la visualisation de texte et de gérer leur comportement à la suite d'un événement tactile. Afin d'éviter de composer et d'écrire votre propre encapsuleur, l'encapsuleur HTML est utilisé.
TextView tView = ((TextView)v.findViewById(R.id.otp_activation_notification));
Spanned ssBuilder = Html.fromHtml("Not a link <a href=\"foo://haha/arg1/arg2?q1=1&q2=2\">The first link</a> bla bla "
+ " <a href=\"foo://haha2?q3=3\">The second link</a>");
tView.setText(ssBuilder);
tView.setMovementMethod(new LinkMovementMethod(){
@Override
public boolean onTouchEvent(TextView widget, Spannable buffer, MotionEvent event) {
//TODO: In order to override the links actions
int x = (int) event.getX();
int y = (int) event.getY();
Layout layout = widget.getLayout();
int line = layout.getLineForVertical(y);
int off = layout.getOffsetForHorizontal(line, x);
try {
URLSpan[] urlSpans = buffer.getSpans(off, off, URLSpan.class);
if (urlSpans != null && urlSpans.length > 0) {
Uri uri = Uri.parse(urlSpans[0].getURL());
String scheme = uri.getScheme();
if ("foo".equals(scheme)) {
String command = uri.getAuthority();
if ("haha".equals(command)) {
List<String> arguments = uri.getPathSegments();
String q1 = uri.getQueryParameter("q1");
String q2 = uri.getQueryParameter("q2");
//TODO: Execute command (pay attention for MotionEvent)
return true;
} else if ("haha2".equals(command)) {
String q3 = uri.getQueryParameter("q2");
//TODO: Execute command2 (pay attention for MotionEvent)
return true;
}
return false;
}
}
} catch (Exception e) {
//Log: unable to parse link;
}
//return false in case you don't want to use default behavior.
return super.onTouchEvent(widget, buffer, event);
}
});
Est-ce que [linkify] (https://stackoverflow.com/questions/4746293/android-linkify-textview) résout votre problème? – isabsent
Dans le cas de Linkify, vous devez implémenter votre propre schéma et vous devrez toujours surcharger la méthode Linkmovement ou écrire les vôtres pour réagir aux événements tactiles. La méthode ci-dessous utilise le wrapper Html du framework, ce qui est plutôt pratique, je pense. – Kvant