2015-10-22 1 views
0

J'ai le texte en jachère: "En cliquant sur OK, vous désactiverez le service." En savoir plus ".comment ajouter une action à une partie d'une chaîne android

je veux faire « En savoir plus » cliquables, mais je veux un menu contextuel apparaisse au lieu de diriger vers un site Web

j'ai utilisé la question de la pile de mise en jachère: How to set the part of the text view is clickable

qui fonctionnait très bien. J'ai trouvé l'index d'apprendre plus par ".". cette solution plante l'application en chinois et en hindi (en hindi on écrit un point -> |).

Comment puis-je rendre le bouton "En savoir plus" cliquable de manière générique pour afficher un menu contextuel?

Existe-t-il un moyen de définir l'action de clic dans strings.xml, comme appeler un lien? (au lieu d'appeler un lien -> menu contextuel de lancement?)

Répondre

0

a résolu le problème, peut-être un hack mais il fonctionne très bien.

dans strings.xml j'ai ajouté

//<a></a> tags to be removed later on 
<string name="learn_more">By clicking OK you will disable the service. &#60;a&#62;Learn more&#60;&#47;a&#62;</string> 

dans le code:

TextView textView= (TextView) findViewById(R.id.textViewInLayout); 
textView.setMovementMethod(LinkMovementMethod.getInstance()); 
textView.setText(R.string.learn_more); 

//indexes of the clickable text 
int start = textView.getText().toString().indexOf("<a>"); 
int end = textView.getText().toString().indexOf("</a>"); 

//set the text as html to make the tags disappear 
textView.setText(Html.fromHtml(getString(R.string.learn_more))); 

//make the text clickable 
Spannable spannable = (Spannable) textView.getText(); 

ClickableSpan myClickableSpan = new ClickableSpan() { 
@Override 
public void onClick(View widget) { 
     yourActionHere(); 
    } 
}; 

// end - 3 beacuse of </a> 
spannable.setSpan(myClickableSpan, start, end - 3,Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);` 
0

Vous pouvez utiliser WebView et ancrer. Créer nouveau WebViewClient (en particulier vous avez besoin de cette méthode: shouldOverrideUrlLoading()) et faire tout ce que vous voulez lorsque l'utilisateur va cliquer sur votre ancre.