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; 把这个注释就好了...