自编自动省略文字之Text控件

更新: 2016-12-25 16:23 编辑:生活经验

        笔者在开发产品过程中,需要使用Text控件显示文字。在产品开发之前由于没有用到elide这一个Text控件属性,原来这一属性可以自动将多余的文字转化为...省略号。虽然没有用到Text自带的elide参数,但还是挺有用的。由于自编了这一控件的实现方法,代码也是不多可以供参考学习。

        有人会问,Text控件都有了,怎么还要自己写呢?这Text控件一个自动省略符都是”...”的,并不能更改它的符号,使用了自编的方法可以更改其显示方式,这样就具有多样性了,在产品开发过程中更具有通用性。

自编自动省略文字之Text控件

        1. 我们看下图可以看到,那三个文本框里面的文字,文本框二和文本框三在显示上可能没有多大区别,但与文本框一的显示就有很大区别了。我们仔细看了一下文本框二和文本框三,其实他们还是有区别的就是最后的省略号间隔大小。

自编自动省略文字之Text控件

        2. 至于这一个AutoText控件的使用很简单,设置文本框大小然后再设置其文本内容就可以了,与Text控件显示一样。官方Text控件elide属性其实可以不只是右省略的,还可以设置中间省略与左省略的功能。虽然自编AutoText没有实现中间省略与左省略,但是因为其原理都和右省略一样,只要修改一下AutoText参数即可。

自编自动省略文字之Text控件

自编自动省略文字之Text控件

        3. 这时候我们说回这一控件的实现机制了,我们先看一下代码。

        该代码其实与Text控件还是有区别的,这里有onTextChanged信号,主要作用是,但AutoText文本内容改变时,自动触发自身省略设置,没有该信号的使用则当改变Text文本时,AutoText将会失效自动省略功能。而Compont.onCompont为构造函数,当控件第一次使用立刻执行自动省略文字功能。

自编自动省略文字之Text控件

        4. 这时候就是getClipFont(textString)函数了,可以看到onTextChanged与onCompleted都是调用该函数的,足见这一函数的重要性。这一函数的实现方式主要使用到了Text的paintedWidth参数它的作用是返回文本的长度而width为Text文本框的长度(下图一),他们是由很大的区别,这是需要注意的。而textCount参数的作用是文本框的width可以放下多少个文字,从而计算出进行适当的剪切文字在其后加入省略符。

自编自动省略文字之Text控件

自编自动省略文字之Text控件

        5. 利用上面这些函数的方法,我们修改其省略符号,我们就修改

成”。。。”这样吧,看下图效果和代码图。我们只需要在这一getClipFont(textString)函数里面做适当的修改就可以了。

        将代码修改成这样textString.substring(0, textCount-2) + "。。。"还是需要注意的,除了把”...”修改成”。。。”, 还需要修改textCount-2的适当修改一下,因为”...”与”。。。”长度有点不一样,还是需要做适当的修改。

自编自动省略文字之Text控件

        6. 说到这里就完了吗?

        当然还没有。这时候我们需要扩展一下,就是修改AutoText控件实现文本的自动加载句号。这一功能也是挺实用的。这里要说一下textString.substring(textString.length-1, textString.length)这个函数的作用是截取最后一个字符,用来与”。”进行判断。

自编自动省略文字之Text控件

       7. 源码下载,仅供学习参考。

http://download.csdn.net/detail/nicai_xiaoqinxi/9720838

1.无论是使用Text自带的elide参数还是自编的AutoText控件都需要设置其控件长度;

2.textCount根据需要具体的省略法而修改其值。