FairyGUI笔记:RichText(七)
GRichTextField
富⽂本⽀持动态创建,例如:
GRichTextField aRichTextField = new GRichTextField();
aRichTextField.SetSize(100,100);
< = "<a href='xxx'>Hello World</a>";
侦听富⽂本中链接点击的⽅法是(这个事件是冒泡的,也就是你可以不在富⽂本上侦听,在它的⽗元件或者祖⽗元件上侦听都是可以的):
//Unity/Cry, EventContext⾥的data就是href值。
//AS3/Egret,就是href值。
aRichTextField.addEventListener(TextEvent.LINK, onClickLink);
//Egret,就是href值。
aRichTextField.addEventListener(TextEvent.LINK, ClickLink, this);
//Laya, onClickLink的参数就是href值。
<(laya.events.Event.LINK,ClickLink);
//Cocos2dx,DataValue().asString()就是href的值。
aRichTextField->addEventListener(UIEventType::ClickLink, CC_CALLBACK_1(AClass::onClickLink, this));
富⽂本最重要的功能是⽀持HTML解析和渲染。普通的⽂本样式标签,例如FONT、B、I、U这些⼀般都能很好的⽀持。其他⼀些对象标签,例如A、IMG等在各个引擎中⽀持的⼒度有所不同:
AS3/Starling ⽀持A标签和IMG标签,⽀持混排UI库⾥的图⽚/动画和外部图⽚。⽀持定制超级链接的样式:
aRichTextField.ALinkFormat = new TextFormat(...);
什么是低筋面粉
aRichTextField.AHoverFormat = new TextFormat(...);
Egret ⽀持A标签。不⽀持图⽂混排。
Laya ⽀持A标签和IMG标签,只⽀持混排外部图⽚,不⽀持UI库⾥的图⽚和动画。Laya版本的GRichTextField的实质是包装了Laya的HTMLDivElement,可以通过以下⽅式访问:
var div:HtmlDivElement = aRichTextField.div;
Unity ⽀持A、IMG、INPUT、SELECT,P等。
HTML语法
IMG ⽀持混排UI库⾥的图⽚/动画和外部(⽹络)图⽚。加载外部图⽚的能⼒可以通过提供。注意,img标签需要使⽤“/>”结束,⽽不是“>”。
<img src='ui://包名/图⽚名'/>
//还可以指定图⽚的⼤⼩
<img src='ui://包名/图⽚名' width='20' height='20'/>
//还可以⽤百分⽐指定图⽚的⼤⼩
<img src='ui://包名/图⽚名' width='50%' height='50%'/>
A 显⽰⼀个超级链接。例如:彻上彻下
<a href='xxx'>link text</a>
⽀持定义超级链接的样式。如果是全局修改,可以使⽤HtmlParOptions的静态属性,例如:
//注意:全局设置应该在创建富⽂本之前调⽤。
//设置整个项⽬中所有链接是否带下划线
HtmlParOptions.DefaultLinkUnderline = fal;
//设置超级链接的颜⾊
HtmlParOptions.DefaultLinkColor = ...;
HtmlParOptions.DefaultLinkBgColor = ...;
HtmlParOptions.DefaultLinkHoverBgColor = ...;
如果你只想定义单个富⽂本的链接样式,那么可以这样:
HtmlParOptions options = aRichTextField.richTextField.htmlParOptions;
options.linkUnderline = fal;
options.linkColor = ...;
options.linkBgColor = ...;
options.linkHoverBgColor = ...;
如果同⼀个⽂本内的各个链接都需要不同颜⾊,那么在链接标签外围⽤颜⾊标签包住就⾏了。
INPUT ⽀持显⽰以下语法:
//显⽰⼀个按钮
<input type='button' value='标题'/>
汕头龙泉岩
/
/显⽰⼀个输⼊框
<input type='text' value='⽂本内容'/>晴川历历
如果需要显⽰按钮,需要先定义按钮对应的资源,否则⽆法显⽰。例如:
对于输⼊框,可以定义输⼊框的边框颜⾊和边框⼤⼩,例如:
HtmlInput.defaultBorderSize = 2;
HtmlInput.defaultBorderColor = ...;
SELECT 是使⽤该标签可以显⽰⼀个下拉选择框。例如:
<lect name=''>
<option value='1'>1</option>
<option value='2'>2</option>
</lect>
在使⽤下拉框前,需要先定义下拉框对应的资源,否则⽆法显⽰。例如:
小镇姑娘歌词
P 例如显⽰⼀张居中的图⽚:
<p align='center'><img src=''/></p>
默认情况下,GRichTextField将⽂本当做HTML⽚段处理,即对于空格、回车等空⽩字符是保留的。如果你希望当做完整的HTML处理,不保留空⽩,可以⽤以下⼏种⽅式:
使⽤HtmlParOptions:
HtmlParOptions options = aRichTextField.richTextField.htmlParOptions;
options.ignoreWhiteSpace = true;
将⽂本内容使⽤HTML或BODY标签包裹,例如:
< = "<body>text </body>";
如果要访问HTML中的对象,可以使⽤以下的⽅式:
//当前⽂本中具有的HTML元素数量
喝酒好处
int cnt = aRichTextField.richTextField.htmlElementCount;
米兰怎么养
//获得指定索引的HTML元素,0=<index<cnt
HtmlElement element = aRichTextField.richTextField.GetHtmlElementAt(index);
//获得指定名称的HTML元素。名称由HTML元素⾥的name属性指定。
element = aRichTextField.richTextField.GetHtmlElement(elementName);
//获得HTML元素对应的HTML对象。HTML对象的类型有HtmlImage、HtmlLink、HtmlInput等。
IHtmlObject htmlObject = (IHtmlObject)element.htmlObject;
pe==HtmlElementType.Image)
{
HtmlImage image = (HtmlImage)htmlObject;
}
⼜例如,如果要制作⿏标移到链接上显⽰信息的效果:
int cnt = richText.htmlObjectCount;
for(int i=0;i<cnt;i++)
{
IHtmlObject obj = richText.GetHtmlObjectAt(i);
if(obj is HtmlLink)履历表模板
{
((HtmlLink)obj).RollOver.Add(onLinkRollOver);
((HtmlLink)obj).RollOut.Add(onLinkRollOut);
}
}
//你可以在RollOver和RollOut的处理⾥调⽤GRoot.inst.ShowPopup、GRoot.inst.ShowTooltips或者其他处理。
你也可以扩展实现⾃⼰的IHtmlObject。你需要⾃⼰实现⼀个IHtmlPageContext接⼝,然后赋值给RichTextField的htmlPageContext属性。