Как заставить динамическое текстовое поле сдвигать другие элементы управления вниз - PullRequest
0 голосов
/ 06 декабря 2011

Это действительно простой вопрос, который, я думал, будет легко найти в Google, но я не могу придумать терминологию.

Я использую CS4 и AS3 с несколькими многострочными динамическими текстовыми полямидруг под другом.Когда я заполняю верхнее текстовое поле, мне бы хотелось, чтобы оно автоматически выдвигало другие текстовые поля под ним, когда содержимое переходит к дополнительным строкам.

В настоящий момент оно переносится только в промежуток между каждым текстом.поле, но затем останавливается при достижении текстового поля ниже.

Есть ли свойство, позволяющее это (я работал в Silverlight и там был на элементах управления), который я могу просто установить или мне придется вручнуюреализовать это и вызвать функциональность, чтобы переустанавливать все элементы управления y свойства каждый раз, когда я изменяю текст в текстовом поле?

Спасибо

Ответы [ 2 ]

1 голос
/ 06 декабря 2011

Я не знаю ни одного свойства, чтобы легко это сделать, но я вручную реализовал нечто подобное. Всякий раз, когда вы хотите настроить свои textFields, вызывайте функцию, подобную этой: (непроверенный код)

 private function arrangeText():void {

    var maxWidth:Number = 400; //the ending width of your

    //Set width to something low for all textfields, 
    //to get accurate reading of textWidth
    txtTitle.width = 200; 
    txtSub.width = 200;

    //Set autosizing temporarily
    txtTitle.autoSize = TextFieldAutoSize.LEFT;
    txtSub.autoSize = TextFieldAutoSize.LEFT;

    //Get roughly the number of lines required to display all the text
    var titleLines:Number = Math.ceil(txtTitle.textWidth / maxWidth) - 1;
    var subLines:Number = Math.ceil(txtSub.textWidth / maxWidth) - 1;

    //Now that you know roughtly how many lines are needed, 
    //Take off autosizing
    txtTitle.autoSize = TextFieldAutoSize.NONE;
    txtSub.autoSize = TextFieldAutoSize.NONE;

    //set textfield widths bask to normal
    txtTitle.width = maxWidth;
    txtSub.width = maxWidth;

    //Apply new height values to textfields
    //Prevent textfields from being too tall as well with the "> 3" part
    txtTitle.height = (titleLines > 3 ? 100 : txtTitle.textHeight) + 5;
    txtSub.height = (subLines > 3 ? 60 : txtSub.textHeight) + 5;

    //Starting from the top going down
    //Move each of your textfields under the previous one
    txtSub.y = txtTitle.x + txtTitle.height;

}
1 голос
/ 06 декабря 2011

сначала вам нужно, чтобы текстовое поле было автоматически изменено

myTextField.autoSize = TextFieldAutoSize.LEFT

, затем вам нужно прослушать изменения текстового поля, или пользователь набирает его

myTextField.addEventListener(Event.CHANGE, function(e:Event):void{
    var newHeight:number = myTextField.height;
}

в зависимости от новой высотыВы можете перемещать другие элементы под ним вверх или вниз

...