在android中的TextView中可点击的单词

我有文本dynamic更改的TextView。 这个文本包含像<a href='myWord'>myWord</a>这样的string。 我想要点击这个“链接”后myWord出现在同一个活动的EditText中。

这是我的代码:

 txt.setText(Html.fromHtml("...<a href='link'>link</a>...")); txt.setMovementMethod(LinkMovementMethod.getInstance()); 

它适用于href属性中的URL,但另一种格式有错误。

我在StackOverflow上发现了很多类似的问题,但都是关于url链接的。 在我的应用程序中,我想在活动中创build“链接”。 一般来说,如果取决于标签,我可以将标签更改为另一个标签。

请帮帮我! 谢谢!

—–解决—–谢谢雅各布菲利普斯的想法!

愿将来有一个有趣的人。 这是一个代码:

 //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){} } 

Solutions Collecting From Web of "在android中的TextView中可点击的单词"

这应该做的伎俩。 只需在OnClickListener中更改编辑文本的文本。 它可能会减less,但这应该工作。

 private void foo() { SpannableString link = makeLinkSpan("click here", new View.OnClickListener() { @Override public void onClick(View v) { // respond to click } }); // We need a TextView instance. TextView tv = new TextView(context); // Set the TextView's text tv.setText("To perform action, "); // Append the link we created above using a function defined below. tv.append(link); // Append a period (this will not be a link). tv.append("."); // This line makes the link clickable! makeLinksFocusable(tv); } /* * Methods used above. */ private SpannableString makeLinkSpan(CharSequence text, View.OnClickListener listener) { SpannableString link = new SpannableString(text); link.setSpan(new ClickableString(listener), 0, text.length(), SpannableString.SPAN_INCLUSIVE_EXCLUSIVE); return link; } private void makeLinksFocusable(TextView tv) { MovementMethod m = tv.getMovementMethod(); if ((m == null) || !(m instanceof LinkMovementMethod)) { if (tv.getLinksClickable()) { tv.setMovementMethod(LinkMovementMethod.getInstance()); } } } /* * ClickableString class */ private static class ClickableString extends ClickableSpan { private View.OnClickListener mListener; public ClickableString(View.OnClickListener listener) { mListener = listener; } @Override public void onClick(View v) { mListener.onClick(v); } } 

更好的方法是

  SpannableString ss = new SpannableString("Android is a Software stack"); ClickableSpan clickableSpan = new ClickableSpan() { @Override public void onClick(View textView) { startActivity(new Intent(MyActivity.this, NextActivity.class)); } }; ss.setSpan(clickableSpan, 22, 27, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); //where 22 and 27 are the starting and ending index of the String. Now word stack is clickable // onClicking stack it will open NextActiivty TextView textView = (TextView) findViewById(R.id.hello); textView.setText(ss); textView.setMovementMethod(LinkMovementMethod.getInstance()); 

我知道的最好的解决方法是创build您自己的Button类。 您可以使Button具有透明背景,以便用户只能看到文本。 然后当按下button时,将button的TextColor和TextStyle更改为更深的颜色并加下划线。 这将完全按照链接工作。 然后,您可以使用startActivity转到适当的活动。 您不应该使用超链接连接到应用程序中的其他活动。

我个人的意见是将第二个textview包含你想成为你的链接的文本。 然后你可以在第二个textView的onClick中做你的动作。 也作为zzzzzzzzzzz上面陈述,您可以select将文本的字体属性更改为任何你想要的,一旦被点击。

为了让它充分回答混合的答案;

 private void textAreaInit() { String str = "<a href='#'>Link 1</a> and <a href='#'>Link2</a> is here."; TextView tv = mConfirmText; String[] devFull = str.split("<a href='#'>"); tv.append(Html.fromHtml(devFull[0])); SpannableString[] link = new SpannableString[devFull.length-1]; 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]; final String a = linkWord; cs[i-1] = new ClickableSpan() { private String w = a; @Override public void onClick(View widget) { if(w.equals("Link 1")) { Intent intent = new Intent(PrintPropertiesActivity.this, ViewerAcivity.class); intent.putExtra("title", "Link1"); intent.putExtra("uri", "link1"); intent.putExtra("type", "1"); startActivity(intent); } else { Intent intent = new Intent(PrintPropertiesActivity.this, ViewerAcivity.class); intent.putExtra("title", "Link2"); intent.putExtra("uri", "link2"); intent.putExtra("type", "2"); startActivity(intent); } } }; link[i-1].setSpan(cs[i-1], 0, linkWord.length(), 0); tv.append(link[i-1]); try{ tv.append(Html.fromHtml(devDevFull[1])); } catch(Exception e){} } makeLinksFocusable(tv); } private void makeLinksFocusable(TextView tv) { MovementMethod m = tv.getMovementMethod(); if ((m == null) || !(m instanceof LinkMovementMethod)) { if (tv.getLinksClickable()) { tv.setMovementMethod(LinkMovementMethod.getInstance()); } } }