安卓中文本视图TextView的扩展使用

来源:互联网 发布:乘联会销量数据suv 编辑:程序博客网 时间:2024/06/04 19:25

最近碰到一个问题,listView的填充使用了textView,如果textView 的文本长度很长,展现会出现很大的问题,这个时候就想控制下textview的长度,如果超过2行就修改成...加一个链接去跳转。

虽然textview的属性中maxLines 和ellipsize结合使用也会达到这个效果,但是尾部不能加上自定义链接还是不太实用,这个时候网络有人给出的方法可以基本轻松解决,那就是获得viewTreeObserver然后添加一个监听器,在布局完成后,得到第二行最后一个字符的角标,然后修剪这个textView的字符串。



这是个很好的方法,但是在和Listview搭配使用的时候会出现部分失效的问题。比如,页面可见的只有两个条目,那个第三个条目设置无效,照样还会很长。

翻看log日志

发现在listView滚动的时候globleLayout没有再执行了,导致在布局初始化时没有绘制的item无法调用方法去修剪textView,而viewHolder的复用使得这种没有修剪的textView周期性的出现在列表中,如下图

比如我的事例中,初始化时只有前两条可见,那么第3 6 9条的修剪是不起作用,其他的由于复用了viewholder因此可以起效。

经过多次试验终于解决这种bug,先上图

可以看到,我在这里重复调用了修剪字符串的方法,只是加了一个lineEndIndex!=0这个判断条件,这样避免了在第一次重复调用时,由于视图树没有布局完成导致修剪字符串时出现(0-8 = -8)从而角标越界异常导致程序崩溃,

当然这个字段只在第一次布局时起作用,然后我们给lineEndIndex赋值后就没有这个角标越界问题。

至于文本部分变色,使用了html对象的方法,“<font color=\"#ff0000\">[详细]</font>”这个字符串经过html解析后在屏幕上就可以使“[详细]”显示为对应的ff0000颜色。

当然textView的方法远不止这些,我们也可以在其中添加一些其他字段使其能够部分点击,并跳转

<![CDATA[<div><br />作者:<a href="https://xxx.com">可点击文字</a><br /></div>]]>

并在代码中添加textView.setMovementMethod(LinkMovementMethod.getInstance());
tvAbout.setText(Html.fromHtml(上面的string)),就可以实现点击指定的字跳转到浏览器,请访问href中定义的网址,上图:

点击后效果:


0 0
原创粉丝点击