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

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

  • 相关阅读:
    数学+高精度 ZOJ 2313 Chinese Girls' Amusement
    最短路(Bellman_Ford) POJ 1860 Currency Exchange
    贪心 Gym 100502E Opening Ceremony
    概率 Gym 100502D Dice Game
    判断 Gym 100502K Train Passengers
    BFS POJ 3278 Catch That Cow
    DFS POJ 2362 Square
    DFS ZOJ 1002/HDOJ 1045 Fire Net
    组合数学(全排列)+DFS CSU 1563 Lexicography
    stack UVA 442 Matrix Chain Multiplication
  • 原文地址:https://www.cnblogs.com/hanhongmin/p/4536021.html
Copyright © 2011-2022 走看看