PDA

Просмотр полной версии : Изменение высоты TextField в CheckBox


Srednas
11.10.2011, 10:25
Здравствуйте.

Подскажите, как можно изменить высоту TextField в CheckBox? Точнее она уменьшена, но CheckBox ведет себя как TextField, у которого не задан TextFieldAutoSize: объекты расположенные ниже чекбокса отодвинуты визуально на 100 пикселей хотя:


this.repeatCheckBox.textField.autoSize = TextFieldAutoSize.LEFT;
trace(this.repeatCheckBox.textField.height); // 19
trace(this.repeatCheckBox.textField.y); // 0
trace(this.repeatCheckBox.height); // 22
trace(this.repeatCheckBox.y); // 0


результат все равно:

http://s017.***********/i439/1110/ea/96cb4c6d376f.gif (http://www.***********)

Azo
11.10.2011, 12:39
ну

this.repeatCheckBox.textField.height =19

и тогда не должно быть 100px

а может дело не в TextField

там может какой другой спрайт еще

Srednas
11.10.2011, 13:10
ну

this.repeatCheckBox.textField.height =19

и тогда не должно быть 100px

а может дело не в TextField

там может какой другой спрайт еще

Даж и не знаю, куда думать..

Это не работает:
this.repeatCheckBox.textField.height =19

Это тоже не работает:

this.repeatCheckBox.setSize(50,20);

Azo
11.10.2011, 13:36
попробуй удалить этот текст и посмотреть на реакцию..
this.repeatCheckBox.removeChild(textField)

если отступ продолжает быть.- дело в другом

Srednas
11.10.2011, 13:42
попробуй удалить этот текст и посмотреть на реакцию..
this.repeatCheckBox.removeChild(textField)

если отступ продолжает быть.- дело в другом

Все становится нормально после удаления. При добавлении — снова сдвигается вверх, т.к. чекбокс занимает 100 px.

mayakwd
11.10.2011, 13:47
CheckBox#labelPlacement (http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/fl/controls/LabelButton.html#labelPlacement)

В случае если вам это не подойдет, то необходимо создать собственный класс (который наследуется от CheckBox), у которого следует переопределить метод drawLayout

Azo
11.10.2011, 13:49
this.repeatCheckBox.removeChild(textField)

var textField:TextField=new TextField();
textField.height=19;
textField.width=100 - 20;
textField.text="проверка";
this.repeatCheckBox.addChild(textField);
а так)

mayakwd
11.10.2011, 13:58
Azo, так нельзя делать, это плохой подход. Вы консервным ножом вскрываете банку с откручиваемой крышкой.

Правильно будет использовать переопределение метода, либо «нативного» labelPlacement.

Srednas
11.10.2011, 14:04
this.repeatCheckBox.removeChild(textField)

var textField:TextField=new TextField();
textField.height=19;
textField.width=100 - 20;
textField.text="проверка";
this.repeatCheckBox.addChild(textField);
а так)

Та то же самое.
Значить что-то в чекбоксе кроме такстфилда есть, только вот как до этого добраться?..

Добавлено через 1 минуту
Azo, так нельзя делать, это плохой подход. Вы консервным ножом вскрываете банку с откручиваемой крышкой.

Правильно будет использовать переопределение метода, либо «нативного» labelPlacement.

labelPlacement —*меняет положение лейбла, но высота чекбокса, к сожалению, не изменяется.

trng
11.10.2011, 14:11
Компоненты fl.controls.* - это капризные компоненты.
У меня была похожая проблема с TextArea (не хотел уменьшаться невидимый вертикальный скроллбар).
NumericStepper тоже глючил (не помню детали).

В вашем случае не уменьшается один из вложенных компонентов.
Попробуйте trace. Что напишет?
for (var i:int=0;i<this.repeatCheckBox.numChildren;i++) {
trace(this.repeatCheckBox.getChildAt(i).name,
this.repeatCheckBox.getChildAt(i),
this.repeatCheckBox.getChildAt(i).width,
this.repeatCheckBox.getChildAt(i).height);
}


После этого сделайте trace детей компонента с "ненормальной" шириной/высотой.


Можете также поустанавливать opaqueBackground:

this.repeatCheckBox.opaqueBackground = 0xff0000;
И для "деток":
this.repeatCheckBox.getChildAt(0).opaqueBackground = 0x00ff00;
this.repeatCheckBox.getChildAt(1).opaqueBackground = 0x0000ff;
... до numChildren

Сама по себе такая установка opaqueBackground может повлиять на поведение глюка.

mayakwd
11.10.2011, 15:04
Srednas, значит воспользуйтесь переопределением метода drawLayout, делов то 5 минут

Srednas
11.10.2011, 15:13
Компоненты fl.controls.* - это капризные компоненты.
У меня была похожая проблема с TextArea (не хотел уменьшаться невидимый вертикальный скроллбар).
NumericStepper тоже глючил (не помню детали).

В вашем случае не уменьшается один из вложенных компонентов.
Попробуйте trace. Что напишет?
for (var i:int=0;i<this.repeatCheckBox.numChildren;i++) {
trace(this.repeatCheckBox.getChildAt(i).name,
this.repeatCheckBox.getChildAt(i),
this.repeatCheckBox.getChildAt(i).width,
this.repeatCheckBox.getChildAt(i).height);
}


После этого сделайте trace детей компонента с "ненормальной" шириной/высотой.


Можете также поустанавливать opaqueBackground:

this.repeatCheckBox.opaqueBackground = 0xff0000;
И для "деток":
this.repeatCheckBox.getChildAt(0).opaqueBackground = 0x00ff00;
this.repeatCheckBox.getChildAt(1).opaqueBackground = 0x0000ff;
... до numChildren

Сама по себе такая установка opaqueBackground может повлиять на поведение глюка.

Да.. Выводит виновников.

instance54 [object focusRectSkin] 104 104
instance53 [object Shape] 100 100
instance52 [object TextField] 54 19

Добавлено через 1 минуту
Srednas, значит воспользуйтесь переопределением метода drawLayout, делов то 5 минут

Не дошел я пока до переопределения методов.
Подскажите на примере как это сделать?

trng
11.10.2011, 15:48
Не дошел я пока до переопределения методов.
Подскажите на примере как это сделать?

mayakwd, извини если опередил.
package {
import fl.controls.CheckBox;
import flash.display.DisplayObject;

public class mycb extends CheckBox{

public function mycb() {
// constructor code
}

override protected function drawLayout():void {
var badObject: DisplayObject = this.getChildAt(1); // проблемный instance
badObject.width = 50;
badObject.height = 50;
}

}

}

Пример рабочий, но не оптимальный.
Надо бы еще проверять badObject на предмет наличия, действительно ли он превышает допустимые размеры и т.п.
(можно, например сделать перебор "детей" в цикле с проверкой/установкой размеров)

Если у вас нет ресайза, то можно вместо drawLayout вписать код в конструткор.
Также в этом случае и если чекбокс один - можно вообще не создавать класс, а при инициализации просто задать размеры "проблемных детей".