TextFlow入门$

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, 开始图文混排吧.
[本日志由 sontin 于 2011-06-28 08:30 AM 编辑]
文章来自: 本站原创
引用通告: 查看所有引用 | 我要引用此文章
Tags:
评论: 0 | 引用: 0 | 查看次数: 6565
发表评论
昵 称:
密 码: 游客发言不需要密码.
验证码: 验证码
内 容:
选 项:
虽然发表评论不用注册,但是为了保护您的发言权,建议您注册帐号.
字数限制 1000 字 | UBB代码 关闭 | [img]标签 关闭