zoukankan      html  css  js  c++  java
  • 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原创文章,不得未经同意转载。

  • 相关阅读:
    【BZOJ4538】[Hnoi2016]网络 整体二分+树状数组
    【BZOJ4543】[POI2014]Hotel加强版 长链剖分+DP
    【BZOJ1304】[CQOI2009]叶子的染色 树形DP
    【BZOJ4552】[Tjoi2016&Heoi2016]排序 二分+线段树
    【BZOJ4557】[JLoi2016]侦察守卫 树形DP
    【BZOJ4499】线性函数 线段树
    【BZOJ1576】[Usaco2009 Jan]安全路经Travel 最短路+并查集
    【BZOJ4560】[JLoi2016]字符串覆盖 KMP+状压DP
    【BZOJ2124】等差子序列 树状数组维护hash值
    MDX导航结构层次:《Microsoft SQL Server 2008 MDX Step by Step》学习笔记九
  • 原文地址:https://www.cnblogs.com/bhlsheji/p/4907124.html
Copyright © 2011-2022 走看看