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);

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

  • 相关阅读:
    Django REST framework+Vue 打造生鲜超市(十二)
    pymsql
    (四)Jmeter系列之---http接口请求脚本优化
    (三)Jmeter系列之---实现一个简单的http接口请求
    2021每天一个知识点(二月)
    (二)Jmeter系列之---Jmeter工具介绍
    (一)Jmeter系列之---性能测试+工具介绍
    Linux磁盘的分区操作
    Python格式化处理json数据的方式
    (17)-Python3之--文件操作
  • 原文地址:https://www.cnblogs.com/hanhongmin/p/4536021.html
Copyright © 2011-2022 走看看