Apache flex 在Flex中,如何调整字体大小以将标签与图标对齐?

Apache flex 在Flex中,如何调整字体大小以将标签与图标对齐?,apache-flex,Apache Flex,我正在构建一个小的FlexUI组件,它在文本标签旁边显示一个彩色正方形。我希望能够指定正方形的大小,并在内部调整标签的属性,以便线条高度与正方形匹配,并且文本相对于正方形垂直居中 目前,我正在为文本使用mx.controls.Label。将fontSize样式设置为正方形的大小不起作用,标签会变得太大。在调试器中跟踪了几个值之后,我发现 内部文本字段的行高(通过getTextFieldMetircs()获得的TextFieldMetrics对象的ascend和ascend属性之和)似乎是我指定

我正在构建一个小的FlexUI组件,它在文本标签旁边显示一个彩色正方形。我希望能够指定正方形的大小,并在内部调整标签的属性,以便线条高度与正方形匹配,并且文本相对于正方形垂直居中

目前,我正在为文本使用
mx.controls.Label
。将
fontSize
样式设置为正方形的大小不起作用,标签会变得太大。在调试器中跟踪了几个值之后,我发现

  • 内部文本字段的行高(通过
    getTextFieldMetircs()
    获得的
    TextFieldMetrics
    对象的
    ascend
    ascend
    属性之和)似乎是我指定的s字体大小的120%
  • 默认的“前导”为2像素,我不能在
    标签
    级别直接更改,这会增加内部文本字段的总体高度(
    getTextFieldMetrics().height
  • 标签
    组件的高度比这个还要大5个像素,我不知道它们来自哪里

我目前的解决方案是将字体大小设置为
Math.round((iconSize-2)/1.2)
,但尽管效果不错,但似乎并不令人满意。有没有更可靠、更直接的方法呢?

与此同时,我尝试过使用
UITextField
而不是
标签,这让我得出了一个有趣的观察结果:这两个组件似乎都根据字体大小进行了一些内部缩放和大小调整,这样渲染文本的周围将始终有一些填充。使用任一组件时,对于相同的字体大小,从
getTextLineMetrics()
返回的数字是不同的

UITextField
渲染文本,使组件的总像素高度符合指定为
fontSize
的数字,从而使实际文本稍微变小(约2-4像素)。此外,当您将
前导
设置为零时,它似乎会忽略

标签
将生成的线条高度与指定的
fontSize
相匹配,使组件大于该高度(约5个像素)


虽然这确实让我感到困惑,但我对使用
标签
组件并对其进行定位感到满意,这样顶部和底部多余的空白就会被父组件剪裁掉,不再重要。然后,文本具有正确的大小。我垂直居中,这很容易,但使用
getTextLineMetrics()
中的数字也可以进行更复杂的定位。

你能不能缩放标签以适应正方形,而不是尝试计算字体大小?@Gregor-我没有尝试过。当你说缩放时,你是指
setActualSize
还是设置缩放因子,我想我在
UIComponent
DisplayObject
API的某个地方记得这些缩放因子?(另外,你的评论可能应该作为答案发布,不是吗?)我的意思是设置scaleX和scaleY(你可能需要嵌入字体才能工作),我会告诉你。如果有效,我将添加它作为答案;)祝你好运。从我的经验来看,当涉及到文本度量时,sdk3是一团混乱。再加上Label控件有一些硬编码的填充,您就有了疼痛的配方。没有尝试过sdk 4,也许他们在那里做得更好。。。