在TextView中使用spannable和Ellipsize发出问题

时间:2016-02-17 14:32:14

标签: android textview ellipsis spannable

我的应用中有新闻Feed。在Feed项中,我有一个文本视图,可能有url链接和主题标签。我需要这两个url和hashtags是可点击的,这是实现的。

 protected void setTextClickable(TextView txtView) {

       L.i(getClass().getSimpleName(), "SET TEXT CLICKABLE ENTERED" + "LINES: " +String.valueOf(mTextViewLines));

        String text = txtView.getText().toString();
        ExpandableTextViewClickableSpan clickSpan = null;
        ExpandableTextViewClickableSpan clickableSpan = null;

        final SpannableString hashTagInText = new SpannableString(text);
        String regexURL = "\\(?\\b((http|https)://|www[.])[-A-Za-z0-9+&@#/%?=~_()|!:,.;]*[-A-Za-z0-9+&@#/%=~_()|]";
        String regexHashTag = "#([A-Za-z0-9_-]+)";
        Matcher matcherURL = Pattern.compile(regexURL).matcher(hashTagInText);
        Matcher matcherHashTag = Pattern.compile(regexHashTag).matcher(hashTagInText);
        int color = view.getResources().getColor(R.color.tinted_green_colour);

        while (matcherURL.find()) {
            clickSpan = new ExpandableTextViewClickableSpan(currentFragment, false, color, hashTagInText,
                    matcherURL.start(), matcherURL.end(),  MenuUtils.sURL_LINKID);
            hashTagInText.setSpan(clickSpan, matcherURL.start(), matcherURL.end(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
        }
        while (matcherHashTag.find()) {
            clickableSpan   = new ExpandableTextViewClickableSpan(currentFragment, false, color, hashTagInText,
                    matcherHashTag.start(), matcherHashTag.end(), MenuUtils.sHASHTAG_LINKID);
            hashTagInText.setSpan(clickableSpan, matcherHashTag.start(), matcherHashTag.end(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
        }
}

但是,还要求如果消息长于4行,则省略并显示更多/更少选项的视图。

由于将方法引入颜色并设置可点击的网址和主题标签(与spannables一起使用,然后渲染省略号无效)。

所以现在我的省略号不起作用。我在SO上遇到了这个Spannable Ellipsis Issue。但是,除非在全局布局侦听器中完成,否则这需要我无法获得的行数。

我已经完成并成功获得了行数。然而问题是在调用onGlobalLayout方法之前调用了绑定数据方法,其中应用了spannable并填充了布局(我想要应用我自己的省略号方法),这样就留下了0行数

有没有简单的方法将省略号和spannable结合起来?任何帮助表示赞赏。

0 个答案:

没有答案