Actionscript 3 如何调整文本字段大小以适应所有文本

Actionscript 3 如何调整文本字段大小以适应所有文本,actionscript-3,textfield,Actionscript 3,Textfield,我得到了一个非常动态的文本字段(html文本),我必须调整框的大小来修复它并计算占用的空间。我在用 myTextField.height = myTextField.textHeight; 但结果并不十分精确,甚至Adobe的描述也不这么认为。有更好的方法吗?这个类有一些“自动调整大小”的适当性吗?最后一点:如果这个“文本高度”不能提供真实的文本高度,它的用途是什么 TextField类有一个返回的方法 这两页上都有很好的例子 可以使用方法获取多行文本字段中的文本行数 请执行以下操作: myT

我得到了一个非常动态的文本字段(html文本),我必须调整框的大小来修复它并计算占用的空间。我在用

myTextField.height = myTextField.textHeight;
但结果并不十分精确,甚至Adobe的描述也不这么认为。有更好的方法吗?这个类有一些“自动调整大小”的适当性吗?最后一点:如果这个“文本高度”不能提供真实的文本高度,它的用途是什么

TextField类有一个返回的方法

这两页上都有很好的例子

可以使用方法获取多行文本字段中的文本行数

请执行以下操作:

myTextField.autoSize = TextFieldAutoSize.LEFT;
// if it should not be singleline then add this aswell
myTextField.wordWrap = true;
myTextField.multiline = true;
关于你的第二个问题:
textHeight
返回文本的高度(以像素为单位)。

检查文档中的示例->

textHeight
如果定义宽度,则返回正确的值。我还添加了4-6的边距,这取决于文本字段的文本格式,以确保显示所有文本。虽然它有点粗糙,但动态TFs也没有让我失望,但我只使用了
text
属性,而不是
htmlText
。关于自动调整大小-
textHeight
用于此目的,但没有实际的文本字段自动调整大小。

如果您需要更精确的内容,我通过查看找到了一个解决方案

以下两种方法对我来说都非常适用于单行、多行换行(仅文本换行和\n)和多行无换行(仅\n)

简短假设版本(不要使用此选项):

行具有不同度量的版本越长越好(使用此选项):

var=2;
var totalines=textField.bottomScrollV-textField.scrollV+textField.maxsollv;
var实际高度=0;
var=0;
对于(var i=0;i

对于具有内联图像的单行测试,其中textField高度为32,textHeight为39,计算的高度(上面的实际高度)为34。对于多行测试,高度为97.20,文本高度为23.79,实际高度为97.15。此实际高度包括两侧的檐槽,但如果有,则去掉尾随的前导。

这只会将文本向左对齐。您尝试过吗?如果autoSize设置为TextFieldAutoSize.LEFT,则文本将被视为左对齐文本,这意味着文本字段的左边距保持不变,文本字段单行的任何大小调整都在右边距上。如果文本包含换行符(例如“\n”或“\r”),底部也会调整大小以适合下一行文本。我尝试过,但没有成功。可能是因为我使用的是html,而分隔符是段落的结束-开始标记。也许这是一个骗局,但不确定这是否是一个值得效仿的例子。不过还是要谢谢你!这只是一条线。我需要所有的文本字段。我会添加一些像素来避免剪切文本的底部,但我确信这应该是一种专业的处理方法。我想知道问题是否出在边界线上。我将边框保留为true,因此有一行可能会从文本中提取2个像素,从而导致错误。奇怪的是,当我开始写第一行的时候,字符的底部被切掉了,但那一行就在那里。第二行接缝正常,直到我打断段落(新的p标记)。最后一行不再出现,因为我一直在写。我正在做的是保存textHeight的正确值(我需要它来对齐照片),然后添加一些点以确保显示最后一行。我不确定,我不在textfields上使用border,如果将width设置为等于
textHeight
,它仍然会切底。如san.chez回复图像所示(这是TextLineMetrics官方文档的一部分)在左侧、顶部、右侧和底部都有一个2像素的排水沟。虽然Adobe没有为这些排水沟的大小指定一个命名常量看起来很奇怪。因为没有人有意见分享,所以我选择了我现在使用的方法。这并不完美,但对我来说已经足够了。也许有一天Adobe会提供更好的东西。
var totalLines = textField.bottomScrollV - textField.scrollV + textField.maxScrollV;
var metrics    = textField.getLineMetrics(0);
var gutter     = 2;
var actualHeight = (metrics.ascent + metrics.descent) * totalLines + (totalLines - 1) * metrics.leading + 2 * gutter;
var gutter  = 2;
var totalLines = textField.bottomScrollV - textField.scrollV + textField.maxScrollV;

var actualHeight = 0;
var prevLeading = 0;
for (var i = 0; i < totalLines; i += 1)
{
    var metrics = textField.getLineMetrics(i);
    actualHeight += metrics.ascent + metrics.descent + prevLeading;
    prevLeading = metrics.leading;
}
actualHeight += 2 * gutter;