在做聊天表情时候,TextField多行自动换行情况下,经常在用getCharBoundaries()获取rectangle时候,在第二行一下会获取到null而导致无法获取字符准确位置。看了一些资料和解决方法,说是加trace后正常;自己测试了下,加了trace只能保证第一次正常,第二次输入多行照样出错,后来又查到和文本高度有关系,于是自己测试后发现解决此问题方法,分享如下:
1:在使用txt.getCharBoundaries()之前,将文本高度存入变量storeHeight变量中(var storeHeight:Number=txt.height)。
2:使用txt.getCharBoundaries()之前先让文本高度值为文本的textHeight。
3:这时候再使用txt.getCharBoundaries()将不会为Null。
4:再改变文本高度为原来高度。
code:
var storeHeight:Number=txt.height;//存储txt本来高度(因为txt高度还包括行距,和txtHeight不等。)
var phizIDs:Array=[2,3,8......]//此数组为要查找的字符的位置数组
for(var u:uint=0;u<phizIDs.length;u++)
{
txt.height=txt.textHeight;
trace(txt.getCharBoundaries(phizIDs[u]));
txt.height=storeHeight;
}
//连发15个表情trace结果如下:
(x=2, y=42, w=6, h=15)
(x=26, y=42, w=6, h=15)
(x=50, y=42, w=6, h=15)
(x=74, y=42, w=6, h=15)
(x=98, y=42, w=6, h=15)
(x=122, y=42, w=6, h=15)
(x=146, y=42, w=6, h=15)
(x=2, y=62, w=6, h=15)
(x=26, y=62, w=6, h=15)
(x=50, y=62, w=6, h=15)
(x=74, y=62, w=6, h=15)
(x=98, y=62, w=6, h=15)
(x=122, y=62, w=6, h=15)
(x=146, y=62, w=6, h=15)
1:在使用txt.getCharBoundaries()之前,将文本高度存入变量storeHeight变量中(var storeHeight:Number=txt.height)。
2:使用txt.getCharBoundaries()之前先让文本高度值为文本的textHeight。
3:这时候再使用txt.getCharBoundaries()将不会为Null。
4:再改变文本高度为原来高度。
code:
var storeHeight:Number=txt.height;//存储txt本来高度(因为txt高度还包括行距,和txtHeight不等。)
var phizIDs:Array=[2,3,8......]//此数组为要查找的字符的位置数组
for(var u:uint=0;u<phizIDs.length;u++)
{
txt.height=txt.textHeight;
trace(txt.getCharBoundaries(phizIDs[u]));
txt.height=storeHeight;
}
//连发15个表情trace结果如下:
(x=2, y=42, w=6, h=15)
(x=26, y=42, w=6, h=15)
(x=50, y=42, w=6, h=15)
(x=74, y=42, w=6, h=15)
(x=98, y=42, w=6, h=15)
(x=122, y=42, w=6, h=15)
(x=146, y=42, w=6, h=15)
(x=2, y=62, w=6, h=15)
(x=26, y=62, w=6, h=15)
(x=50, y=62, w=6, h=15)
(x=74, y=62, w=6, h=15)
(x=98, y=62, w=6, h=15)
(x=122, y=62, w=6, h=15)
(x=146, y=62, w=6, h=15)
(x=2, y=82, w=6, h=15)没有Null存在,多此测试均正常,头疼几天的问题终于解决了。