从右边填充HBox? VBox从底部?

时间:2010-01-27 22:17:45

标签: flex actionscript-3 hbox

我只是真的需要HBox的答案,但想想如果我们在这里得到一个好的答案,它会帮助任何人试图用VBox做类似的事情。很高兴在actionscript和MXML中都知道这一点。

所以我有一个HBox,我希望从左边对齐一些文本,从右边对齐一些无线电。像这样:

 ___________________________________________________
|                                                   |
|Text                                Yes ()  No()   |
|___________________________________________________|

我目前正在通过在文本和收音机之间放置一个宽度为100%的隐形盒来实现这一点,就像这样

 _____ __________________________________ ________________
|     |                                  |                |
|Text | invisible box  percentWidth=100; | Yes ()  No()   |
|_____|__________________________________|________________|

我更愿意让自己的HBox中的无线电正确对齐:

 _____ ________________________________________________________
|     |                                                        |
|Text |                                         Yes ()  No()   |
|_____|________________________________________________________|

我看过一些帖子谈到了一个horizo​​ntalAlign属性,但我没有在文档中看到它。

那我怎么能做到这一点?

由于 〜麦克

2 个答案:

答案 0 :(得分:8)

在VBox和HBox组件上有一个horizontalAlign属性和一个verticalAlign属性(它继承自Box)。它们确定组件子级的水平和垂直对齐方式。

我通常使用Spacer对象,就像Sam提到的那样。但是对于你想要做的事情,这将是很好的。

在MXML中,您可以执行以下操作:

<mx:RadioButtonGroup id="yesNoRadioGroup"/>

<mx:HBox id="containingHBox" width="100%">
    <mx:Text id="textElement" width="200" text="lakdfa lkadslkjraklnd kadflk lakdsjlkja lksdlkjdflk jalkdlkjdfslksajdf lkjasdflkjdsalkjds lksdjlkj"/>
    <mx:HBox id="rightAlignedHorizontalContent" width="100%" horizontalAlign="right">
        <mx:RadioButton id="yesRadio" label="Yes" groupName="yesNoRadioGroup"/>
        <mx:RadioButton id="noRadio" label="No" groupName ="yesNoRadioGroup"/>
    </mx:HBox>
</mx:HBox>

请注意,设置为horizontalAlign的HBox必须具有宽度值,否则,它只会足够宽以容纳其子项的宽度,在这种情况下,对齐没有实际意义。

这是AS版本:

<mx:Script>
    <![CDATA[
        import mx.controls.RadioButton;
        import mx.controls.RadioButtonGroup;
        import mx.controls.Text;

        private var containingHBox:HBox;
        private var textElement:Text;
        private var rightAlignedHorizontalContent:HBox;
        private var yesNoRadioGroup:RadioButtonGroup; 
        private var yesRadio:RadioButton;
        private var noRadio:RadioButton;

        override protected function createChildren():void
        {
            super.createChildren();

            containingHBox = new HBox();
            containingHBox.percentWidth = 100;

            textElement = new Text();
            textElement.width = 200;
            textElement.text = "lakdfa lkadslkjraklnd kadflk lakdsjlkja lksdlkjdflk jalkdlkjdfslksajdf lkjasdflkjdsalkjds lksdjlkj";

            rightAlignedHorizontalContent = new HBox();
            rightAlignedHorizontalContent.percentWidth = 100;
            rightAlignedHorizontalContent.setStyle("horizontalAlign","right");

            yesNoRadioGroup = new RadioButtonGroup();

            yesRadio = new RadioButton();
            yesRadio.label = "Yes";
            yesRadio.groupName = "yesNoRadioGroup";

            noRadio = new RadioButton();
            noRadio.label = "No";
            noRadio.groupName = "yesNoRadioGroup";


            addChild(containingHBox);

            containingHBox.addChild(textElement);
            containingHBox.addChild(rightAlignedHorizontalContent);

            rightAlignedHorizontalContent.addChild(yesRadio);
            rightAlignedHorizontalContent.addChild(noRadio);
        }
    ]]>
</mx:Script>

答案 1 :(得分:4)

如果您已经在使用HBox / VBox作为布局,那么使用Spacer是将某些项目一直移动到右侧/底部的正确方法。

另一种选择是基于约束的布局。当您想要将内容锚定到左侧时,这是很好的,您使用画布作为父级,并在子集上设置“right ='0'”以将内容一直定位到右侧。当您根据尺寸堆叠多个项目时,这不太理想。您可以使用绑定“right ='{noComponent.width}”将Yes放在No的右侧。