自编自动省略文字之Text控件
1、 1. 我们看下图可以看到,那三个文本框里面的文字,文本框二和文本框三在显示上可能没有多大区别,但与文本框一的显示就有很大区别了。我们仔细看了一下文本框二和文本框三,其实他们还是有区别的就是最后的省略号间隔大小。
2、 2. 至于这一个AutoText控件的使用很简单,设置文本框大小然后再设置其文本内容就可以了,与Text控件显示一样。官方Text控件elide属性其实可以不只是右省略的,还可以设置中间省略与左省略的功能。虽然自编AutoText没有实现中间省略与左省略,但是因为其原理都和右省略一样,只要修改一下AutoText参数即可。
3、 3. 这时候我们说回这一控件的实现机制了,我们先看一下代码。
该代码其实与Text控件还是有区别的,这里有onTextChanged信号,主要作用是,但AutoText文本内容改变时,自动触发自身省略设置,没有该信号的使用则当改变Text文本时,AutoText将会失效自动省略功能。而Compont.onCompont为构造函数,当控件第一次使用立刻执行自动省略文字功能。
4、 4. 这时候就是getClipFont(textString)函数了,可以看到onTextChanged与onCompleted都是调用该函数的,足见这一函数的重要性。这一函数的实现方式主要使用到了Text的paintedWidth参数它的作用是返回文本的长度而width为Text文本框的长度(下图一),他们是由很大的区别,这是需要注意的。而textCount参数的作用是文本框的width可以放下多少个文字,从而计算出进行适当的剪切文字在其后加入省略符。
5、 5. 利用上面这些函数的方法,我们修改其省略符号,我们就修改
成”。。。”这样吧,看下图效果和代码图。我们只需要在这一getClipFont(textString)函数里面做适当的修改就可以了。
将代码修改成这样textString.substring(0, textCount-2) + "。。。"还是需要注意的,除了把”...”修改成”。。。”, 还需要修改textCount-2的适当修改一下,因为”...”与”。。。”长度有点不一样,还是需要做适当的修改。
6、 6. 说到这里就完了吗?
当然还没有。这时候我们需要扩展一下,就是修改AutoText控件实现文本的自动加载句号。这一功能也是挺实用的。这里要说一下textString.substring(textString.length-1, textString.length)这个函数的作用是截取最后一个字符,用来与”。”进行判断。
7、 7. 源码下载,仅供学习参考。
http://download.csdn.net/detail/nicai_xiaoqinxi/9720838