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);
}
}flex
解決方法二: 封裝包裏的 SpriteRenderer類 把_spriteContainer.y = -textRenderer.scrollHeight; 把這個註釋就行了...spa