zoukankan      html  css  js  c++  java
  • Android TextView 添加部分文字高亮,点击功能

    如图,这里我想要的应用场景大概就是2处。

    1. 图中"#教父#"表示的话题性质的内容;

    2. 图中"@你我零距离"表示用户昵称的内容。

    基本这些新浪微博客户端也都有。

    话题的实现方式:

    1. 检查帖子内容中是否包含双井号,有的话取出开始和结束位置,还有双井号包含的内容。

      /**
         *识别字符串中的话题,话题是双"#"包含的一段文本
         * */
        public static boolean containsTopic(String content){
            if(content==null){
                return false;
            }
            return content.matches(".*\#.+\#.*");
        }
      
        public static Topic getTopicStartEnd(String content){
            Pattern pattern = Pattern.compile("\#.+?\#");
    
            Matcher m = pattern.matcher(content);
            if(m.find()){
                Topic t = new Topic();
                t.setStart(m.start());
                t.setEnd(m.end());
                t.setTopicText(m.group());
                System.out.println("start-end:"+m.start()+"-"+m.end()+":"+m.group());
                return t;
            }else{
                return null;
            }
        }

    上图代码我只是测试可行性,未完善的思考,比如,我只取了1个话题,而内容中可能包含多个话题或者说多个#井号的情况未考虑。

    另外有一点,什么正则表达式的几种用法也没深究,什么贪婪、侵占、勉强什么的。参考:http://www.cppblog.com/biao/archive/2010/02/05/107298.html

    2. 使用 ClickableSpan 

                  ClickableSpan span = new ClickableSpan() {
                                @Override
                                public void onClick(View widget) {
                                    Topic tc = (Topic)widget.getTag();//setTag用于传递数据
                                    Log.d("spannn","click......................"+tc.getTopicText());
                                }
                            };
                            content.setTag(c);
                            content.setMovementMethod(LinkMovementMethod.getInstance());
                            Spannable wordtoSpan = new SpannableString(contentText);
                            wordtoSpan.setSpan(span, c.getStart(), c.getEnd(), Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
                            content.setText(wordtoSpan);

    用户昵称的处理方式基本也是这样。

  • 相关阅读:
    北京爱丽丝幻橙科技有限公司
    红杉资本中国基金:创业者背后的创业者
    关于我们_ | 腕表时代watchtimes.com.cn
    当你想放弃的时候,问一下自己你尽力了吗
    李圣杰_百度百科
    范思哲
    DOM Traversal Example | Documentation | Qt Project
    关于QT中evaluateJavaScript()函数返回值的处理问题
    JS获取整个HTML网页代码
    javascript
  • 原文地址:https://www.cnblogs.com/hanhongmin/p/4536021.html
Copyright © 2011-2022 走看看