我只是真的需要HBox的答案,但想想如果我们在这里得到一个好的答案,它会帮助任何人试图用VBox做类似的事情。很高兴在actionscript和MXML中都知道这一点。
所以我有一个HBox,我希望从左边对齐一些文本,从右边对齐一些无线电。像这样:
___________________________________________________
| |
|Text Yes () No() |
|___________________________________________________|
我目前正在通过在文本和收音机之间放置一个宽度为100%的隐形盒来实现这一点,就像这样
_____ __________________________________ ________________
| | | |
|Text | invisible box percentWidth=100; | Yes () No() |
|_____|__________________________________|________________|
我更愿意让自己的HBox中的无线电正确对齐:
_____ ________________________________________________________
| | |
|Text | Yes () No() |
|_____|________________________________________________________|
我看过一些帖子谈到了一个horizontalAlign属性,但我没有在文档中看到它。
那我怎么能做到这一点?
由于 〜麦克
答案 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的右侧。