是否可以为同一TextView的不同单词提供不同的OnClickListener? 如果没有,你能告诉我一种方法来做这样的事情,记住我需要正确地说出来吗?我的意思是我不能为每个单词添加TextView,因为我必须显示的文本可能很长,并且当一行结束时没有布局会将它们放到新行。谢谢=)
答案 0 :(得分:1)
为此你必须制作spannable String,下面是我的代码 - 。 在第一个方法中,makeTagLinks传递要分割的文本,第二个参数是文本视图。第二种方法是单击侦听器。
private void makeTagLinks(final String text, final TextView tv) {
tv.setText("");
String split[] = text.split("(?= )");
int mColor = mContext.getResources().getColor(R.color.font_color);
SpannableString ss1 = null;
for(int i=0;i<split.length;i++){
ss1= new SpannableString(split[i]);
int l = split[i].length();
String tag = split[i].trim();
ss1.setSpan(new MyClickableSpan(tag), 0, l, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
if(tag.startsWith("#")){
ss1.setSpan(new ForegroundColorSpan(mColor),0,l,Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
}
else{
if(i==0){
ss1.setSpan(new StyleSpan(android.graphics.Typeface.BOLD), 0, l, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
ss1.setSpan(new ForegroundColorSpan(mColor),0,l,Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
}
else{
ss1.setSpan(new StyleSpan(android.graphics.Typeface.NORMAL), 0, l, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
ss1.setSpan(new ForegroundColorSpan(Color.BLACK),0,l,Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
}
}
tv.append(ss1);
}
tv.setMovementMethod(LinkMovementMethod.getInstance());
}
class MyClickableSpan extends ClickableSpan{
String clickedText = "";
public MyClickableSpan(String string) {
super();
clickedText = string;
}
public void onClick(View tv) {
if(clickedText.startsWith("#")){
try{
if(dialog!=null){
dialog.dismiss();
}
}
catch(Exception e){
e.printStackTrace();
}
FragmentTransaction ft = mFragmentManager.beginTransaction();
Fragment mFragment = MyFragment.getInstance(mFragmentManager,clickedText);
ft.replace(R.id.container,mFragment);
ft.addToBackStack(null);
ft.commit();
}
}
@Override
public void updateDrawState(TextPaint ds) {
}
}
希望它会对你有所帮助。