mot cliquable à l'intérieur de TextView android
J'ai TextView avec un texte modifié de manière dynamique. Ce texte contient des chaînes de caractères comme <a href='myWord'>myWord</a>
. Je veux qu'après cliquez sur ce "lien" myWord apparaissent dans l'EditText dans la même activité.
C'est mon code:
txt.setText(Html.fromHtml("...<a href='link'>link</a>..."));
txt.setMovementMethod(LinkMovementMethod.getInstance());
C'est du travail bien pour les Url à l'intérieur attribut href, mais il y a une erreur pour un autre format.
J'ai trouvé beaucoup de questions similaires sur les StackOverflow mais tous ont été sur des liens url. Dans mon application, j'ai envie de créer "lien" à l'intérieur de l'activité.
En général, je peux changer de tag pour les autres d'une autre si c'est dépendre...
S'il vous plaît aidez-moi!
Merci!!!!
-----RÉSOLU-----
Merci Jacob Phillips pour l'idée!!!!
Mai, il sera intéressant de quelqu'un dans le futur.
C'est un code:
//This is my string;
String str = "<b>Text</b> which contains one <a href='#'>link</a> and another <a href='#'>link</a>";
//TextView;
TextView txt = new TextView(this);
//Split string to parts:
String[] devFull = data[v.getId()][1].split("<a href='#'>");
//Adding first part:
txt.append(Html.fromHtml(devFull[0]));
//Creating array for parts with links (they amount always will devFull.length-1):
SpannableString[] link = new SpannableString[devFull.length-1];
//local vars:
ClickableSpan[] cs = new ClickableSpan[devFull.length-1];
String linkWord;
String[] devDevFull = new String[2];
for(int i=1; i<devFull.length; i++){
//obtaining 'clear' link
devDevFull = devFull[i].split("</a>");
link[i-1] = new SpannableString(devDevFull[0]);
linkWord = devDevFull[0];
cs[i-1] = new ClickableSpan(){
private String w = linkWord;
@Override
public void onClick(View widget) {
//here you can use w (linkWord)
}
};
link[i-1].setSpan(cs[i-1], 0, linkWord.length(), 0);
txt.append(link[i-1]);
try{
txt.append(Html.fromHtml(devDevFull[1]));
}
catch(Exception e){}
}
Vous devez vous connecter pour publier un commentaire.
Cela devrait faire l'affaire. Il suffit de changer votre edittext du texte dans le
OnClickListener
. Il peut être réduit, mais cela devrait fonctionner.mListener.onClick(v);
dans ClickableString classe:The method onClick(DialogInterface, int) in the type DialogInterface.OnClickListener is not applicable for the arguments (View)
et je ne sais pas comment la corriger. Avez-vous des idées. Merci en tout cas!View.OnClickListener
plutôt queDialogInterface.OnClickListener
. Veuillez accepter comme réponse 🙂View.OnClickListener
mais quelque chose clochait. J'ai utilisé ClickableSpan() à la place ClickableString() et cela l'a aidé. Merci!!!!Meilleure approche est
La meilleure solution je sais, c'est de créer votre propre Bouton de classe. Vous pourriez faire le Bouton d'un arrière-plan transparent de sorte que seul le texte est visible par l'utilisateur. Ensuite, lorsque le Bouton est enfoncé, changer la TextColor et TextStyle de la touche pour être une couleur plus sombre et a souligné. Cela fonctionne exactement comme un lien ne. Vous pouvez ensuite utiliser startActivity pour aller à l'appropriation de l'activité. Vous ne devriez pas utiliser des liens hypertexte pour se connecter à d'autres activités au sein de votre application.
Mon avis personnel serait de faire un deuxième textview contenant le texte que vous souhaitez pour votre lien. Alors que vous pourriez faire de votre action dans le onClick de cette deuxième textView . Aussi comme zzzzzzzzzzz indiqué ci-dessus, vous pouvez choisir de modifier les propriétés de police de ce texte, tout ce que vous voulez une fois qu'il a été cliqué.
Pour en faire une réponse complète avec le mélange de réponses;
Vous pouvez utiliser le code ci-dessous;