Я играл с различными методами определения во время выполнения ширины «метки», чтобы я мог изменить размер «метки», потому что я не хочу, чтобы она усекалась. Наконец-то я нашел простое решение с помощью UITextField , которое позволяет мне установить .autoSize , и это здорово! Тем не менее, сейчас я пытаюсь «стилизовать» (просто настроить шрифт и размер шрифта) UITextField , но мне кажется, что я должен сделать это вручную с помощью .htmlText . который я с радостью приму, если это ЕДИНСТВЕННЫЙ путь).
Я использую .text , чтобы установить значение метки.
Мой тестовый пример включает HBox (на самом деле я использую Grid, но они должны быть одинаковыми, и я провел тестирование на обоих):
- Я создаю стиль HBox , и стиль переносится в UITextField . Я не верю, что это будет работать для меня, потому что у меня есть другие компоненты внутри, которые мне нужно стилизовать по-другому.
- Я пробовал: UITextFormat и TextFormat (я вижу, что .htmlText обновляется соответствующим образом, но вывод не обновляется. Тогда я заметил что всякий раз, когда я вызывал hbox.addChild (myUITextField) , он переопределял .htmlText
- Я пытался установить стиль с помощью myUITextField.setStyle ("fontSize", 20) до и / или после вызова addChild , ни один из которых не оказал влияния на дисплей в соответствии с тем, что я отметил выше.
Изменения вносятся, но, кажется, они переопределяются, когда я добавляю их на дисплей.
Так что мне нужно сделать, чтобы стилизовать UITextField помимо ручной настройки его вместе с моим содержимым в .htmlText ? Решения, не использующие UITextField, хороши, если есть простой способ не обрезать текст.
РЕДАКТИРОВАТЬ: я хочу просто сделать textField.setStyle ('fontSize', 20) и ожидать, что каждый раз, когда я изменяю текст, мне не нужно было бы использовать HTML для этого (так что я могу просто сделать textField. text = 'что-то еще' и ожидайте, что размер шрифта все равно будет 20). Это то, что я имел в виду, не используя .htmlText (извините, если я не был ясен раньше).
2-е РЕДАКТИРОВАНИЕ : Полагаю, мне следует изложить всю проблему, и, возможно, это прояснит, что я сделал неправильно или не смог достичь.
Мое намерение состоит в том, чтобы иметь Grid и добавить в нее текст. Я не хочу, чтобы он переносился или прокручивался, поэтому я добавляю его в следующую строку в Grid , когда общая ширина дочерних элементов текущей строки превышает некоторое число. Чтобы добавить его в следующую строку, мне нужно вычислить ширину текста. Я хотел бы иметь возможность стилизовать этот текст индивидуально в зависимости от дел и других компонентов (например, TextInput ). По сути, я пытаюсь выполнить «Заполнить пробел».
Я включил код, чтобы показать, что я сейчас делаю, и это работает несколько. Это может быть не связано с исходной проблемой стилей, но я не могу понять, как отрегулировать расстояние между каждым UITextField, но кроме этого это соответствует тому, что я хотел бы достичь. Отвечает вопрос: я бы хотел изменить стиль каждого из UITextField (в настоящее время настраивается .htmlText ) на что-то более простое, хотя, как я уже упоминал ранее, я с радостью приму используя .htmlText , если это единственное решение.
Итак, у меня есть Grid с x строками, и в каждой строке у меня ровно один GridItem. Основываясь на вводимых данных, я добавляю UITextField и TextInput в GridItem, переходя к следующему GridItem, когда это необходимо. Если у вас есть лучший способ сделать это, то это будет лучше, но я думаю, что я действительно хочу найти другой способ стилизации.
Также другая проблема , я не уверен в точном способе добавления TextField на дисплей. Я попробовал:
var t : TextField = new TextField();
t.text = "I'm a TextField";
hBox.addChild(t); // doesn't work
//this.addChild(t); // doesn't work either
Но я получаю следующую ошибку:
Ошибка типа: ошибка # 1034: сбой приведения типа: невозможно преобразовать flash.text :: TextField @ 172c8f9 в mx.core.IUIComponent.
Вот что у меня работает.
private function styleQuestionString(str : String) : String {
return '<FONT leading="1" face="verdana" size="20">' + str + '</FONT>';
}
private function loadQuestion(str : String) : void {
/* Split the string */
var tmp : Array = str.split("_");
/* Track the current width of the GridItem */
var curWidth : int = 0;
/* Display components that we will add */
var txtField : UITextField = null;
var txtInput : TextInput = null;
/* Track the current GridItem */
var curGridItem : GridItem = null;
/* Track the GridItem we can use */
var gridItemAC : ArrayCollection = new ArrayCollection();
var i : int = 0;
/* Grab the first GridItem from each GridRow of Grid */
var tmpChildArray : Array = questionGrid.getChildren();
for (i = 0; i < tmpChildArray.length; i++) {
gridItemAC.addItem((tmpChildArray[i] as GridRow).getChildAt(0));
}
curGridItem = gridItemAC[0];
gridItemAC.removeItemAt(0);
/* Used to set the tab index of the TextInput */
var txtInputCounter : int = 1;
var txtFieldFormat : UITextFormat = new UITextFormat(this.systemManager);
txtFieldFormat.leading = "1";
//var txtFieldFormat : TextFormat = new TextFormat();
//txtFieldFormat.size = 20;
/* Proper Order
txtField = new UITextField();
txtField.text = tmp[curItem];
txtField.autoSize = TextFieldAutoSize.LEFT;
txtField.setTextFormat(txtFieldFormat);
*/
var txtLineMetrics : TextLineMetrics = null;
var tmpArray : Array = null;
curGridItem.setStyle("leading", "1");
var displayObj : DisplayObject = null;
for (var curItem : int= 0; curItem < tmp.length; curItem++) {
/* Using UITextField because it can be auto-sized! */
/** CORRECT BLOCK (ver 1)
txtField = new UITextField();
txtField.text = tmp[curItem];
txtField.autoSize = TextFieldAutoSize.LEFT;
txtField.setTextFormat(txtFieldFormat);
***/
tmpArray = (tmp[curItem] as String).split(" ");
for (i = 0; i < tmpArray.length; i++) {
if (tmpArray[i] as String != "") {
txtField = new UITextField();
txtField.htmlText = styleQuestionString(tmpArray[i] as String);
//txtField.setTextFormat(txtFieldFormat); // No impact on output
txtLineMetrics = curGridItem.measureHTMLText(txtField.htmlText);
curWidth += txtLineMetrics.width + 2;
if (curWidth >= 670) {
curGridItem = gridItemAC[0];
curGridItem.setStyle("leading", "1");
if (gridItemAC.length != 1) {
gridItemAC.removeItemAt(0);
}
// TODO Configure the proper gap distance
curWidth = txtLineMetrics.width + 2;
}
displayObj = curGridItem.addChild(txtField);
}
}
//txtField.setColor(0xFF0000); // WORKS
if (curItem != tmp.length - 1) {
txtInput = new TextInput();
txtInput.tabIndex = txtInputCounter;
txtInput.setStyle("fontSize", 12);
txtInputCounter++;
txtInput.setStyle("textAlign", "center");
txtInput.width = TEXT_INPUT_WIDTH;
curWidth += TEXT_INPUT_WIDTH;
if (curWidth >= 670) {
curGridItem = gridItemAC[0];
if (gridItemAC.length != 1) {
gridItemAC.removeItemAt(0);
}
// TODO Decide if we need to add a buffer
curWidth = TEXT_INPUT_WIDTH + 2;
}
curGridItem.addChild(txtInput);
txtInputAC.addItem(txtInput);
/* Adds event listener so that we can perform dragging into the TextInput */
txtInput.addEventListener(DragEvent.DRAG_ENTER, dragEnterHandler);
txtInput.addEventListener(DragEvent.DRAG_DROP, dragDropHandler);
txtInput.addEventListener(DragEvent.DRAG_EXIT, dragExitHandler);
}
/* Add event so that this label can be dragged */
//txtField.addEventListener(MouseEvent.MOUSE_MOVE, dragThisLabel(event, txtField.text));
}
}