Android供TextView添加多个点击文字


     我们使用社会性软件的过程中会或多或少像别人的帖子点,图。 : 


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

    

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main); 

 TextView mTextView = (TextView) rootView.findViewById(R.id.like_tv);

            // 构造多个超链接的html, 通过选中的位置来获取用户名
            StringBuilder sbBuilder = new StringBuilder();
            for (int i = 0; i < 10; i++) {
                sbBuilder.append("username-" + i + "、");
            }

            String likeUsers = sbBuilder.substring(0, sbBuilder.lastIndexOf("、")).toString();
            mTextView.setMovementMethod(LinkMovementMethod.getInstance());
            mTextView.setText(addClickablePart(likeUsers), BufferType.SPANNABLE);

 }
         /**
         * @param str
         * @return
         */
        private SpannableStringBuilder addClickablePart(String str) {
            // 第一个赞图标
            ImageSpan span = new ImageSpan(getActivity(), R.drawable.umeng_comm_like);
            SpannableString spanStr = new SpannableString("p.");
            spanStr.setSpan(span, 0, 1, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
            
            SpannableStringBuilder ssb = new SpannableStringBuilder(spanStr);
            ssb.append(str) ;

            String[] likeUsers = str.split("、");

            if (likeUsers.length > 0) {
                // 最后一个
                for (int i = 0; i < likeUsers.length; i++) {
                    final String name = likeUsers[i];
                    final int start = str.indexOf(name) + spanStr.length();
                    ssb.setSpan(new ClickableSpan() {

                        @Override
                        public void onClick(View widget) {
                            Toast.makeText(getView().getContext(), name,
                                    Toast.LENGTH_SHORT).show();
                        }

                        @Override
                        public void updateDrawState(TextPaint ds) {
                            super.updateDrawState(ds);
                            // ds.setColor(Color.RED); // 设置文本颜色
                            // 去掉下划线
                            ds.setUnderlineText(false);
                        }

                    }, start, start + name.length(), 0);
                }
            }
            return ssb.append("等"
                    + likeUsers.length + "个人赞了您.");
        } // end of addClickablePart
  执行效果如图 : 

                          



版权声明:本文Mr.Simple原创文章,不得未经同意转载。

posted @ 2015-10-24 16:42  phlsheji  阅读(1044)  评论(0编辑  收藏  举报