TextFlow入门
textflow, 顾名思义, 就是文本流, 不是显示对象, 不要想着去addchild一个textflow到舞台, 它只是掌管着文本流数据而已, 如果要想把它显示出来, 就必须给它设置一个控制器, 每次文本流添加了新的数据(文本, 链接或图片)后, 刷新该文本流的控制器即可.例子如下:
var p:paragraphelement = new paragraphelement();
var span:spanelement = new spanelement();
var img:inlinegraphicelement = new inlinegraphicelement();
img.source = 1.gif;
img.width = img.height = 20;
span.text = hello, world!;
var link:linkelement = new linkelement();
link.target = _blank;
link.href = http://www.baidu.com;
var linkspan:spanelement = new spanelement();
linkspan.text = 百度;
link.addchild(linkspan);
p.addchild(link);
p.addchild(span);
p.addchild(img);
textflow.addchild(p);
textflow.flowcomposer.addcontroller(new containercontroller(this,500,200));
textflow.flowcomposer.updateallcontrollers();
//
textflow对象不能直接添加元素(文本spanelement, 链接linkelement, 图片inlinegraphicelement), 它的子对象必须是段落元素paragraphelement, 一个textflow可以有很多个段落, 元素添加在段落里. 控制器对象是sprite类型, 后面两个参数是文本的大小.
这时显示出来了图文混排的文本, 但是不能选择, 不能编辑.
如果想选择:
var selectmanager:selectionmanager = new selectionmanager();
textflow.interactionmanager = selectmanager;
如果想编辑:
var editmanager:editmanager = new editmanager();
textflow.interactionmanager = editmanager;
如果想既选择又编辑...
//几个小问题
1 图片不显示: 没设置宽高度(如果是flex4的textarea, textinput等可以不用设).
2 textarea中链接没反应: textarea必须设置为不可编辑状态, 而且不能直接使用textarea.textflow.addchild(p);
需要textarea.textflow = _textflow; 即赋值.
3 不想设置linkelement的链接和目标还要相应鼠标事件, 那就添加flowelementmouseevent事件, 该事件可取消. 获取到链接对象的文本数据: evt.flowelement.gettext();
4 在textarea, textinput这些flex4组件中赋给textflow值后, 以后更新该textflow, 不需要调用textflow.flowcomposer.updateallcontrollers();屏幕文本也会自动更新.
5 textarea, textinput的textflow其实是其内部textarea.textdisplay(richeditabletext类型)的textflow属性.
6 textflow的样式:
var config:configuration = new configuration();
var textlayoutformat:textlayoutformat = new textlayoutformat();
textlayoutformat.color = 0xff0000;
textlayoutformat.fontfamily = arial, helvetica, _sans;
textlayoutformat.kerning = kerning.on;
textlayoutformat.fontstyle = fontposture.italic;
textlayoutformat.textalign = textalign.center;
config.textflowinitialformat = textlayoutformat;
var textflow:textflow = new textflow(config);
段落各个元素的样式, 直接新建textlayoutformat, 然后赋给各元素的.format属性即可.
7 一个段落不能同时添加到不同的控制器中, 比如两个textarea, p总是被添加到后面一个中, 就好比addchild一样. 如果希望两个控制都能添加进去, 可以使用p.deepcopy()方法;
8 textarea让滚动条随文本滚动到尾部的方法
(我用的是4.5.1找不到有可以直接点出verticalScrollPosition属性,只有在 textDisplay下才有)
(方法1)TextArea.validateNow();
var __viewport:IViewport = TextArea.scroller.viewport;
TextArea.textDisplay.verticalScrollPosition = __viewport.contentHeight;
(方法2)TextArea.validateNow();
用此命令就可以:TextArea.verticalScrollPosition=TextArea.maxVerticalScrollPosition;
9 ok, 开始图文混排吧.
textflow, 顾名思义, 就是文本流, 不是显示对象, 不要想着去addchild一个textflow到舞台, 它只是掌管着文本流数据而已, 如果要想把它显示出来, 就必须给它设置一个控制器, 每次文本流添加了新的数据(文本, 链接或图片)后, 刷新该文本流的控制器即可.例子如下:
var p:paragraphelement = new paragraphelement();
var span:spanelement = new spanelement();
var img:inlinegraphicelement = new inlinegraphicelement();
img.source = 1.gif;
img.width = img.height = 20;
span.text = hello, world!;
var link:linkelement = new linkelement();
link.target = _blank;
link.href = http://www.baidu.com;
var linkspan:spanelement = new spanelement();
linkspan.text = 百度;
link.addchild(linkspan);
p.addchild(link);
p.addchild(span);
p.addchild(img);
textflow.addchild(p);
textflow.flowcomposer.addcontroller(new containercontroller(this,500,200));
textflow.flowcomposer.updateallcontrollers();
//
textflow对象不能直接添加元素(文本spanelement, 链接linkelement, 图片inlinegraphicelement), 它的子对象必须是段落元素paragraphelement, 一个textflow可以有很多个段落, 元素添加在段落里. 控制器对象是sprite类型, 后面两个参数是文本的大小.
这时显示出来了图文混排的文本, 但是不能选择, 不能编辑.
如果想选择:
var selectmanager:selectionmanager = new selectionmanager();
textflow.interactionmanager = selectmanager;
如果想编辑:
var editmanager:editmanager = new editmanager();
textflow.interactionmanager = editmanager;
如果想既选择又编辑...
//几个小问题
1 图片不显示: 没设置宽高度(如果是flex4的textarea, textinput等可以不用设).
2 textarea中链接没反应: textarea必须设置为不可编辑状态, 而且不能直接使用textarea.textflow.addchild(p);
需要textarea.textflow = _textflow; 即赋值.
3 不想设置linkelement的链接和目标还要相应鼠标事件, 那就添加flowelementmouseevent事件, 该事件可取消. 获取到链接对象的文本数据: evt.flowelement.gettext();
4 在textarea, textinput这些flex4组件中赋给textflow值后, 以后更新该textflow, 不需要调用textflow.flowcomposer.updateallcontrollers();屏幕文本也会自动更新.
5 textarea, textinput的textflow其实是其内部textarea.textdisplay(richeditabletext类型)的textflow属性.
6 textflow的样式:
var config:configuration = new configuration();
var textlayoutformat:textlayoutformat = new textlayoutformat();
textlayoutformat.color = 0xff0000;
textlayoutformat.fontfamily = arial, helvetica, _sans;
textlayoutformat.kerning = kerning.on;
textlayoutformat.fontstyle = fontposture.italic;
textlayoutformat.textalign = textalign.center;
config.textflowinitialformat = textlayoutformat;
var textflow:textflow = new textflow(config);
段落各个元素的样式, 直接新建textlayoutformat, 然后赋给各元素的.format属性即可.
7 一个段落不能同时添加到不同的控制器中, 比如两个textarea, p总是被添加到后面一个中, 就好比addchild一样. 如果希望两个控制都能添加进去, 可以使用p.deepcopy()方法;
8 textarea让滚动条随文本滚动到尾部的方法
(我用的是4.5.1找不到有可以直接点出verticalScrollPosition属性,只有在 textDisplay下才有)
(方法1)TextArea.validateNow();
var __viewport:IViewport = TextArea.scroller.viewport;
TextArea.textDisplay.verticalScrollPosition = __viewport.contentHeight;
(方法2)TextArea.validateNow();
用此命令就可以:TextArea.verticalScrollPosition=TextArea.maxVerticalScrollPosition;
9 ok, 开始图文混排吧.