Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/apache-flex/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Actionscript 3 有没有办法确保文本元素真正与垂直中间对齐?_Actionscript 3_Apache Flex_Layout_Flex4_Flex Spark - Fatal编程技术网

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”垂直于窗口对象/应用程序的中心。