Вопрос

Мне действительно нужен только ответ HBox, но я полагаю, что если мы получим хороший ответ здесь, это поможет любому, кто попытается сделать подобное с VBox.Было бы неплохо знать это как в actionscript, так и в MXML.

Итак, у меня есть HBox, в котором я хочу, чтобы часть текста была выровнена слева, а некоторые радиостанции - справа.Вот так:

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

В настоящее время я делаю это, установив невидимое поле шириной 100% между текстом и радиоприемниками, вот так

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

Я бы предпочел просто иметь радиостанции в их собственном HBox, выровненном по правому краю, вот так:

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

Я видел, что в некоторых сообщениях говорится о свойстве horizontalAlign , но я нигде не вижу его в документации.

Итак, как я могу этого добиться?

Спасибо ~майк

Это было полезно?

Решение

Существует horizontalAlign собственность, а также verticalAlign свойство, в компонентах VBox и HBox (оно унаследовано от Box).Они определяют горизонтальное и вертикальное выравнивание дочерних элементов компонента.

Обычно я использую объект Spacer, как упоминает Сэм.Но для того, что вы хотите сделать, это будет отлично работать.

В 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>

Обратите внимание, что HBox с horizontalAlign set должен иметь значение width , в противном случае он будет достаточно широким, чтобы вместить ширину своих дочерних элементов, и в этом случае выравнивание является спорным.

Вот версия 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>

Другие советы

Если вы уже используете HBox / VBox для своего макета, то использование Spacer - это правильный способ переместить определенные элементы полностью вправо / снизу.

Альтернативой является макет, основанный на ограничениях.Это хорошо, когда вы хотите привязать содержимое слева, вы используете холст в качестве родительского элемента, а для дочернего элемента устанавливаете "right ='0'", чтобы расположить его полностью вправо.Это менее идеально, когда вы укладываете несколько элементов в зависимости от их размера.Вы могли бы использовать привязку "right='{noComponent.width}", чтобы поместить Yes справа от No.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top