不同的OnClickListeners到同一TextView的不同单词

时间:2014-12-12 10:26:53

标签: android textview listener

是否可以为同一TextView的不同单词提供不同的OnClickListener? 如果没有,你能告诉我一种方法来做这样的事情,记住我需要正确地说出来吗?我的意思是我不能为每个单词添加TextView,因为我必须显示的文本可能很长,并且当一行结束时没有布局会将它们放到新行。谢谢=)

1 个答案:

答案 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) {

        }
} 

希望它会对你有所帮助。