我们可以采取XML格式的方式,来渲染我们的UI界面。同时我们有ZYEditUI工具来处理导入界面以及实时预览。
默认支持的XML格式库:
原生组件:
批渲染组件:
功能组件:
图片赋值,都是使用src
属性,来个简单的示例:
<ZBox>
<ZButton src="图片名"/>
<TouchImageBatchsCountainer src="精灵图名">
<BImage src="精灵图名:精灵名"/>
</TouchImageBatchsCountainer>
</ZBox>
文本赋值,都是使用text
属性,同时高宽可以使用百分比计算赋值:
<ZBox>
<ZLabel text="data" width="100%" height="32"/>
</ZBox>
使用${参数名}
来访问父节点的属性,它会一直往上的父节点查找。例如下面的文本的颜色值,会找到父节点的color值进行赋值。
<ZBox color="0xff0000">
<ZLabel text="data" width="100%" height="32" color="${color}"/>
</ZBox>
我们可以在XML配置中,可以得到创建完毕后执行脚本:
<ZBox id="box">
<ZHaxe id="super">
//可以直接访问id
box.x = 100;</ZHaxe>
</ZBox>
注意:<、>等符号需要转义,可以使用下面的描述代替:
原符号 | XML可用更改符 |
---|---|
> | gt |
< | lt |
>= | egt |
<= | elt |
&& | and |
|| | or |
示例:
if(value lt 1 and value gt 0){
//处理
}
我们可以在XML中定义布局后,然后通过Haxe来构造:
//构造成功后,会默认添加到第二个参数的容器中
var builder = ZBuilder.build(xml,this);
我们还可以在XML中定义方法:
<ZBox id="box">
<!-- 定义一个play的方法 -->
<ZHaxe id="play">
//可以直接访问id
box.x = 100;</ZHaxe>
</ZBox>
开始调用:
"play")(); builder.getFunction(
我们还可以对ZBuilder进行类型扩展,先定义一个类型:
class ExtendsClass extends ZBox {
public var tag:String;
public function new(tag:String = null):Void{
super();
this.tag = tag;
} }
然后进行扩展:
//扩展一个ExtendClass的显示对象类型
ZBuilder.bind(ExtendClass);
这时你可以在XML中使用,同时可以对它的属性进行修改:
<ExtendsClass tag="extendsTag">
</ExtendsClass>
如果你想对属性进行特殊写入,那么可以更改写入方式:
"tag",function(ui,name,value){
ZBuilder.bindParsing(ExtendsClass,//其中ui是当前的ExtendsClass对象,name是tag,value是当前赋值
cast(ui,ExtendsClass).tag = "[TAG]" + value;
});
如果你想在创建的时候,进行属性传参:
function(xml:Xml):Array<Dynamic>{
ZBuilder.bindCreate(ExtendsClass,//此处返回的数组,就是new的时候所使用的参数
return [xml.get("tag")];
});
当你的容器需要修改添加方式:
function(obj:Dynamic,parent:Dynamic,xml:Xml):Void{
ZBuilder.bindAdd(ExtendsClass,//其中obj是添加对象,parent是父亲对象,xml是当前添加的配置
cast(parent,ExtendsClass).addChild(obj);
});
当你的组件结束添加后:
function(ui:Dynamic):Void{
ZBuilder.bindEnd(ExtendsClass,//ui是当前已结束添加的对象
});