Android中为TextView添加多个可点击的文本

来源:互联网 发布:苹果cms采集 编辑:程序博客网 时间:2024/06/03 11:17

 我们使用社交软件的过程中多多少少会为别人的帖子点赞,如图 : 


        可以看到用户页面显示出来的只是点了赞的用户的名称,点击这些名称可以进入到该用户的主页。我们就来实现类似的效果。直接上代码吧。     

[java] view plaincopy在CODE上查看代码片派生到我的代码片
  1.    @Override  
  2.    protected void onCreate(Bundle savedInstanceState) {  
  3.        super.onCreate(savedInstanceState);  
  4.        setContentView(R.layout.activity_main);   
  5.   
  6. TextView mTextView = (TextView) rootView.findViewById(R.id.like_tv);  
  7.   
  8.            // 构造多个超链接的html, 通过选中的位置来获取用户名  
  9.            StringBuilder sbBuilder = new StringBuilder();  
  10.            for (int i = 0; i < 10; i++) {  
  11.                sbBuilder.append("username-" + i + "、");  
  12.            }  
  13.   
  14.            String likeUsers = sbBuilder.substring(0, sbBuilder.lastIndexOf("、")).toString();  
  15.            mTextView.setMovementMethod(LinkMovementMethod.getInstance());  
  16.            mTextView.setText(addClickablePart(likeUsers), BufferType.SPANNABLE);  
  17.   
  18. }  
  19.         /** 
  20.         * @param str 
  21.         * @return 
  22.         */  
  23.        private SpannableStringBuilder addClickablePart(String str) {  
  24.            // 第一个赞图标  
  25.            ImageSpan span = new ImageSpan(getActivity(), R.drawable.umeng_comm_like);  
  26.            SpannableString spanStr = new SpannableString("p.");  
  27.            spanStr.setSpan(span, 01, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);  
  28.              
  29.            SpannableStringBuilder ssb = new SpannableStringBuilder(spanStr);  
  30.            ssb.append(str) ;  
  31.   
  32.            String[] likeUsers = str.split("、");  
  33.   
  34.            if (likeUsers.length > 0) {  
  35.                // 最后一个  
  36.                for (int i = 0; i < likeUsers.length; i++) {  
  37.                    final String name = likeUsers[i];  
  38.                    final int start = str.indexOf(name) + spanStr.length();  
  39.                    ssb.setSpan(new ClickableSpan() {  
  40.   
  41.                        @Override  
  42.                        public void onClick(View widget) {  
  43.                            Toast.makeText(getView().getContext(), name,  
  44.                                    Toast.LENGTH_SHORT).show();  
  45.                        }  
  46.   
  47.                        @Override  
  48.                        public void updateDrawState(TextPaint ds) {  
  49.                            super.updateDrawState(ds);  
  50.                            // ds.setColor(Color.RED); // 设置文本颜色  
  51.                            // 去掉下划线  
  52.                            ds.setUnderlineText(false);  
  53.                        }  
  54.   
  55.                    }, start, start + name.length(), 0);  
  56.                }  
  57.            }  
  58.            return ssb.append("等"  
  59.                    + likeUsers.length + "个人赞了您.");  
  60.        } // end of addClickablePart  
  运行效果如图 : 

                          

0 0