Flex3: Как я могу изменить размер контейнера в зависимости от размера его содержимого? - PullRequest
0 голосов
/ 16 марта 2010

К вашему сведению, я новичок в Flex.

Я пытаюсь создать приложение Flex, которое может автоматически уменьшаться в зависимости от размера содержащихся в нем компонентов, чтобы пользователь мог уменьшить его до минимального размера, чтобы увидеть больше HTML-страницы, в которую он встроен. 1003 *

Я знаю, как изменить размер всего приложения с помощью ExternalInterface, но у меня возникают проблемы с автоматическим определением размера, изменяемого при скрытии или отображении чего-либо.

Например:

Допустим, у меня есть следующая гибкий макет:

<?xml version="1.0" encoding="utf-8"?>
    <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical">
        <mx:VBox width="100%" paddingTop="0" paddingBottom="0"
                paddingLeft="0" paddingRight="0" horizontalGap="0" id="mainVBox">
             <mx:HBox>            
                 <mx:Button label="hide-show b" click="{showHideB()}"/>
             </mx:HBox>

             <mx:Text id="a" text="a" fontSize="42" textAlign="center"/>
             <mx:Text id="b" text="b" fontSize="42" textAlign="center"/>

     </mx:VBox>
 </mx:Application>

Как я могу скрыть одно из текстовых полей и заставить VBox сжиматься? В настоящее время я устанавливаю значение visible = false, но это не влияет на родительский VBox.

Как только VBox сжимается, как я могу определить, что приложению больше не нужно столько места, а затем выяснить, сколько ему нужно меньше места?

Я пытался использовать ResizeEvent, но я не смог заставить их работать, но я мог что-то делать не так.

Спасибо!

1 Ответ

1 голос
/ 16 марта 2010

Flex не использует стиль отображения, который CSS использует с HTML DOM. Эквиваленты Flex «видимости» и «отображения» соответственно «видимы» и «включают в себя».

Итак, если вы хотите удалить элемент из поля зрения И из потока документов, сделайте что-то вроде этого:

.aStyle {
  visible: false;
  includeInLayout: false;
}

Если установить это в ActionScript, вы можете записать его в одну строку:

  // myVBox is a VBox
  myVBox.visible = myVBox.includeInLayout = false;

Теперь, чтобы позволить контейнеру «сжаться, чтобы уместиться» - это действительно легко. Только не кладите на него ширину или высоту. Ваш VBox выше имеет width = "100%", что означает, что он всегда будет занимать столько же места, сколько его родительский контейнер и братья и сестры.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...