Actionscript 3 有没有办法确保文本元素真正与垂直中间对齐?
我过去经常遇到这个问题,到目前为止还没有找到一个通用的解决方案 本质上,问题在于此。如果我想垂直对齐容器中的内容,我将使用Actionscript 3 有没有办法确保文本元素真正与垂直中间对齐?,actionscript-3,apache-flex,layout,flex4,flex-spark,Actionscript 3,Apache Flex,Layout,Flex4,Flex Spark,我过去经常遇到这个问题,到目前为止还没有找到一个通用的解决方案 本质上,问题在于此。如果我想垂直对齐容器中的内容,我将使用verticalAlign=“middle”,但这并不能完全解决真正垂直对齐文本的问题。文本在垂直方向上总是太高,所以在过去,我只是调整了paddingTop和paddingBottom以进行补偿,但这不起作用,因为\u sans的字体因操作系统而异 给定以下布局代码,您将看到问题: <?xml version="1.0"?> <s:Application
verticalAlign=“middle”
,但这并不能完全解决真正垂直对齐文本的问题。文本在垂直方向上总是太高,所以在过去,我只是调整了paddingTop
和paddingBottom
以进行补偿,但这不起作用,因为\u sans
的字体因操作系统而异
给定以下布局代码,您将看到问题:
<?xml version="1.0"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx">
<s:Group width="100" height="50">
<s:Group width="100%" height="100%">
<s:Rect width="100%" height="100%" radiusX="5" radiusY="5">
<s:fill>
<s:SolidColor color="#333333"/>
</s:fill>
</s:Rect>
</s:Group>
<s:VGroup width="100%" height="100%"
paddingTop="10" paddingBottom="10"
paddingRight="10" paddingLeft="10"
verticalAlign="middle">
<s:Line width="100%">
<s:stroke>
<s:SolidColorStroke color="#CCCCCC" weight="1"/>
</s:stroke>
</s:Line>
</s:VGroup>
<s:Label text="100 Percent!" top="10" bottom="10"
left="10" right="10" verticalAlign="middle"
textAlign="center" color="#FFFFFF"/>
</s:Group>
<s:layout>
<s:VerticalLayout horizontalAlign="center"
verticalAlign="middle"/>
</s:layout>
</s:Application>
发生了什么是很清楚的。水平线与框的正中间对齐,但文本偏移了任意数量。我假设这是因为文本基线对齐或其他原因。不管字体大小和字体大小,有没有办法解决这个问题?我想让这一行基本上穿过文本的中间,忽略文本逻辑行下方可能需要的额外空间(即:在布局时忽略“g”和“j”的底部) 查看布局约束。您还可以研究一个简单的绑定表达式,让他们动态地计算确切的需求。尽管它们通常是完美的 它们还可以很好地响应调整大小事件气泡。尝试:
<s:Group width="100" height="50">
<s:Line width="100%" verticalCenter="0">
<s:stroke>
<s:SolidColorStroke color="#CCCCCC" weight="1"/>
</s:stroke>
</s:Line>
<s:Label text="100 Percent!" horizontalCenter="0" verticalCenter="0"/>
</s:Group>
显然不是,尽管可能存在自定义解决方案 请原谅,我不确定布局约束是什么。这是一个不管字体大小和字体大小都能工作的解决方案吗?没问题:代码看起来像是从中心偏移的。如果您使用的是flex builder,则在设计模式下组件的属性托盘中,滚动到底部,您将在带有勾选框的边界中创建组件的表示,这允许您设置其位置行为。您还可以查看文本的alignmentBaseline。是否有理由不使用带有贯穿文本的文本流,而不使用笔划?您是否尝试过使用属性verticalCenter和horizontalCenter。至少在Flex 4中,它们似乎是available@J_A_X整个要点是为了证明中心已偏离目标文本元素。如果我删除了文本,这将破坏该点。@Neeraj应该将这些值设置为什么?都设置为0,flex会自动将子对象的中心放置在窗口的中心上。verticalCenter属性告诉flex子对象的中心距离为“x”垂直于窗口对象/应用程序的中心。