Documentación de Flash CS3 |
|||
| Programación con ActionScript 3.0 > Utilización de texto > Ejemplo: Formato de texto de tipo periódico > División del texto en varias columnas | |||
La clase MultiColumnTextField divide el texto en varios objetos TextField que se disponen como las columnas de un periódico.
El constructor MultiColumnTextField() crea primero una matriz de objetos TextField, uno por cada columna, como se muestra a continuación:
for (var i:int = 0; i < cols; i++)
{
var field:TextField = new TextField();
field.autoSize = TextFieldAutoSize.NONE;
field.wordWrap = true;
field.styleSheet = this.styleSheet;
this.fieldArray.push(field);
this.addChild(field);
}
Se añade cada objeto TextField a la matriz y a la lista de visualización con el método addChild().
Siempre que cambien las propiedades text y styleSheet del objeto StoryLayout, se llama al método layoutColumns() para volver a visualizar el texto. El método layoutColumns() llama al método getOptimalHeight(), mostrado a continuación, para estimar la altura de píxel necesaria para ajustar todo el texto en la anchura de diseño especificada.
public function getOptimalHeight(str:String):int
{
if (fieldArray.length == 0 || str == "" || str == null)
{
return this.preferredHeight;
}
else
{
var colWidth:int = Math.floor( (this.preferredWidth -
((this.numColumns - 1) * gutter)) / this.numColumns);
var field:TextField = fieldArray[0] as TextField;
field.width = colWidth;
field.htmlText = str;
var linesPerCol:int = Math.ceil(field.numLines / this.numColumns);
var metrics:TextLineMetrics = field.getLineMetrics(0);
var prefHeight:int = linesPerCol * metrics.height;
return prefHeight + 4;
}
}
En primer lugar, el método getOptimalHeight() calcula la anchura de cada columna. A continuación establece la anchura y la propiedad htmlText del primer objeto TextField de la matriz. El método getOptimalHeight() utiliza ese primer objeto TextField para descubrir el número total de líneas ajustadas en el texto y, a partir de ese número, determina cuántas líneas debe haber en cada columna. A continuación, llama al método TextField.getLineMetrics() para recuperar un objeto TextLineMetrics que contiene detalles sobre el tamaño del texto en la primera línea. La propiedad TextLineMetrics.height representa la altura de una línea de texto, en píxeles, incluidos los valores ascendente, descendente y de interlineado. La altura óptima para el objeto MultiColumnTextField es la altura de línea multiplicada por el número de líneas por columna, más 4 para tener en cuenta el borde de 2 píxeles que hay por encima y por debajo de un objeto TextField.
A continuación se muestra el código del método layoutColumns():
public function layoutColumns():void
{
if (this._text == "" || this._text == null)
{
return;
}
if (this.fitToText)
{
this.preferredHeight = this.getOptimalHeight(this._text);
}
var colWidth:int = Math.floor( (this.preferredWidth -
((numColumns - 1) * gutter)) / numColumns);
var field:TextField;
var remainder:String = this._text;
var fieldText:String = "";
for (var i:int = 0; i < fieldArray.length; i++)
{
field = this.fieldArray[i] as TextField;
field.width = colWidth;
field.height = this.preferredHeight;
field.x = i * (colWidth + gutter);
field.y = 0;
field.htmlText = "<p>" + remainder + "</p>";
remainder = "";
fieldText = "";
var linesRemaining:int = field.numLines;
var linesVisible:int = field.numLines - field.maxScrollV + 1;
for (var j:int = 0; j < linesRemaining; j++)
{
if (j < linesVisible)
{
fieldText += field.getLineText(j);
}
else
{
remainder += field.getLineText(j);
}
}
field.htmlText = "<p>" + fieldText + "</p>";
}
}
Una vez establecida la propiedad preferredHeight llamando al método getOptimalHeight(), el método layoutColumns() recorre los objetos TextField y establece la altura de cada uno de ellos en el valor de preferredHeight. A continuación, el método layoutColumns() distribuye a cada campo las líneas de texto suficientes para que no se produzca desplazamiento en ningún campo y el texto de cada campo empiece donde acabó el texto del campo anterior.
Flash CS3
Enviarme un mensaje de correo electrónico cuando se añadan comentarios a esta página | Informe de comentarios
Página actual: http://livedocs.adobe.com/flash/9.0_es/main/00000240.html