flex4.5和4.6在textField.getCharBoundaries()这个方法的返回结果上是不一样的。
getCharBoundaries()方法只会返回被渲染出来的文字的边框信息,也就是说,如果文本框大小比真正的文本大小要小,那么你想要打印出没有显示的文字的边框信息是不可能的!
在4.5中,打印出的边框信息是相对于textfield的textHeight属性,而4.6打印出的边框信息是相对于textfield的height属性。这就造成了richtextfield表情显示上的混乱!
解决方法:
private
function renderSprite(sprite:DisplayObject,
index:int):void
{
var
rect:Rectangle =
textRenderer.getCharBoundaries(index);
if
(rect !=
null)
{
sprite.x
= (rect.x + (rect.width - sprite.width) * 0.5 + 0.5) >>
0;
var
y:Number = (rect.height - sprite.height) *
0.5;
var
lineMetrics:TextLineMetrics =
textRenderer.getLineMetrics(textRenderer.getLineIndexOfChar(index));
//make
sure the sprite‘s y is not smaller than the ascent of line
metrics
if
(y + sprite.height < lineMetrics.ascent) y = lineMetrics.ascent -
sprite.height;
sprite.y
= (rect.y + y + 0.5) >>
0;
//flex
sdk
4.6添加,否则有显示bug
sprite.y +=
-_spriteContainer.y;
_spriteContainer.addChild(sprite);
}
}
解决方法二: 封装包里的 SpriteRenderer类 把_spriteContainer.y = -textRenderer.scrollHeight; 把这个注释就好了...