Styling UITextField

Ich habe das Spiel mit verschiedenen Methoden der Bestimmung zur Laufzeit die Breite des "Bezeichnung", so dass ich die Größe der "label", weil ich nicht wollen, es zu kürzen. Ich habe endlich eine einfache Lösung durch UITextField das erlaubt mir, mich zu setzen .autoSize das ist toll! Aber jetzt bin ich versucht, "style" (einfach passen Sie die schriftart und-Größe) der UITextField aber es scheint, dass ich es manuell zu tun mit '.htmlText - ' (die werde ich gerne annehmen, wenn das der EINZIGE Weg).

Ich bin mit dem .text, um den Wert des label.

Meinem test-Fall dreht sich um eine HBox (ich bin tatsächlich mit einem Raster, aber Sie sollten die gleichen sein, und ich habe die Prüfung über beide):

  1. Ich Stil der HBox und der Stil führt durch die UITextField. Ich glaube nicht, dass dies funktioniert für mich, weil ich andere Komponenten drin, die ich brauche, um zu Stil unterschiedlich.
  2. Ich versucht habe: UITextFormat - und TextFormat (ich sehe, dass die .htmlText - wird entsprechend aktualisiert, aber die Ausgabe wird nicht aktualisiert. Dann bemerkte ich, dass, wenn ich rief hbox.addChild(myUITextField) es würde überschreiben die .htmlText -
  3. Ich habe versucht Einstellung der Stil mit myUITextField.setStyle("fontSize", 20), bevor und/oder nachdem der Aufruf an addChild von denen keine Auswirkungen auf die Darstellung als pro, was ich oben erwähnt.

Änderungen vorgenommen werden, aber Sie scheinen zu sein overrided, wenn ich es in der Anzeige.

Also, was muss ich tun, um Stil das UITextField-abgesehen von der manuellen Einstellung, die es zusammen mit meiner Inhalte in .htmlText -? Lösungen nicht mit UITextField ist in Ordnung, solange es gibt einige einfache Weise, die nicht durch kürzen des Textes.

EDIT: ich will nur tun, textField.setStyle('fontSize', 20) und erwarten, dass jedes mal, wenn ich den text ändern, ich würde nicht brauchen, um HTML verwenden, um mit ihm zu gehen (also ich kann nur tun, textField.text = 'etwas anderes' und erwarten, dass es noch eine Schriftgröße von 20). Dies ist, was ich meinte, nicht mit .htmlText - (sorry, wenn ich nicht vorher klar).

2. BEARBEITEN: ich denke, ich sollte das ganze Thema und vielleicht zu klären, was ich falsch gemacht habe oder nicht erreichen könnten.

Meine Absicht ist es, eine Grid und hinzufügen von text in es. Ich will nicht, es zu wickeln oder scrollen, so dass ich fügen Sie es auf die nächste Zeile in der Grid, wenn die aktuelle Zeile Kindern Gesamtbreite überschreitet eine Zahl. Um es auf die nächste Zeile, ich muss in der Lage sein, um die Berechnung der Breite des Textes. Ich würde gerne in der Lage, Stil, text, individuell, basierend auf Fällen, und es gibt wohl noch andere Komponenten (wie ein TextInput). Im Grunde, was ich versuche zu erreichen, ist "Fill in the Blank".

Ich habe code, um zu zeigen, was ich momentan arbeite und es funktioniert etwas. Es könnte sein, un-im Zusammenhang mit der ursprünglichen Frage des styling, aber ich kann nicht herausfinden, wie Sie den Abstand zwischen den einzelnen UITextField-aber abgesehen davon, dass das passt, was ich gerne erreichen. Relevant für die Frage ist: würde ich gerne ändern die Art, wie ich den Stil jedes UITextField (derzeit .htmlText -) in etwas ein bisschen einfach, obwohl wie ich bereits erwähnt werde ich gerne annehmen mit .htmlText - wenn das die einzige Lösung.

Also ich habe ein Grid mit x Zeilen und in jeder Zeile, die habe ich genau ein GridItem. Basierend auf dem input, füge ich UITextField-und TextInput-in der GridItem-gehen Sie auf die nächste GridItem, wenn nötig. Wenn Sie eine bessere Möglichkeit, dies zu tun, dann wäre das besser, aber ich denke, was ich wirklich will, ist zu finden eine andere Art von styling.

Auch ein weiteres problem, ich bin nicht sicher, der exakte Weg, ein TextField in der Anzeige. Ich habe versucht:

var t : TextField = new TextField();
t.text = "I'm a TextField";
hBox.addChild(t);   //doesn't work
//this.addChild(t); //doesn't work either

Aber ich bekomme die folgende Fehlermeldung:

TypeError: Error #1034: Typumwandlung fehlgeschlagen: kann nicht konvertiert werden flash.text::TextField@172c8f9 zu mx.core.IUIComponent.

Hier ist, was ich habe, dass funktioniert.

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));
  }
}
  • Ich bearbeitet habe, basierend auf Ihrem feedback, diese sollten dir helfen 🙂
InformationsquelleAutor nevets1219 | 2009-04-26
Schreibe einen Kommentar