EUI库 - EXML
EXML是可以运行时加载解析的 | |
<e:Skin class="skins.ButtonSkin" states="up,down,disabled" minHeight="50" minWidth="100" xmlns:e="http://ns.egret.com/eui"> <e:Image width="100%" height="100%" scale9Grid="1,3,8,8" alpha.disabled="0.5"source="button_up_png"source.down="button_down_png"/> <e:Label id="labelDisplay" top="8" bottom="8" left="8" right="8"size="20" fontFamily="Tahoma 'Microsoft Yahei'"verticalAlign="middle" textAlign="center" text="按钮" andtextColor="0x000000"/> <e:Image id="iconDisplay" horizontalCenter="0" verticalCenter="0"/> 描述了一个按钮的皮肤class 是 skins.ButtonSkin alpha.disabled = 0.5source.downtextAlign left center right (和horizontalAlign的布局值一样) |
|
直接引用Exml文件 | 假设 exml的要节点是 Skin这时可以直接这样var button = new eui.Button();button.skinName = "resource/skins/ButtonSkin.exml"this.addChild( button ) ; |
动态加载Exml文件 | 如果 exml的根节点不是 SkinEXML.load( "skins/ButonSkin.exml", this.onLoaded, this ) ;private onLoaded( clazz:any, url:string ):void{ var button = new eui.Button(); button.skinName = clazz ; this.addChild( button ) ;} |
嵌入EXML到代码 | var className = "skins.ButtonSkin";var exmlText = `<e:Skin class="${className}" states="up,over,down,disabled" xmlns:s="http://ns.egret.com/eui"> ...</e:Skin>`;var button = new eui.Button(); button.skinName = exmlText ; this.addChild( button ) ;
或者先用HttpRequest去加载然后用EXML.parse( exmlText ) 去解析,直接可以返回类定义 |
<e:Group class="app.MyGroup" xmlns:e="http://ns.egret.com/eui"> </e:Group> 和下面代码含义一样:module app { 注意一定要加 class |
|
最基本的图片 | <e:Image source="image/button_up.png" x="10"/><e:Image source="image/button_up.png" x="10"> <e:scale9Grid> <e:Rectangle x="10" y="10" width="45" height="35"/> </e:scale9Grid> |
id属性 |
这个id属性与HTML中的id并不是一回事,它的结果相当于给解析后的类声明了一个公开变量
我们可以在节点上声明一个id属性,注意这个id属性与HTML中的id并不是一回事,它的结果相当于给解析后的类声明了一个公开变量。例如: - <e:Group class="app.MyGroup" xmlns:e="http://ns.egret.com/eui"> <e:Image id="iconDisplay" />
</e:Group>
等价于:
- module app { - export class MyGroup extends eui.Group {
- public iconDisplay:eui.Image;
- public constructor(){- super();- var image = new eui.Image();- this.addChild(image);- this.iconDisplay = image;- }- }- }
|
语法糖 |
<e:Image source="image/button_up.png" x="10" scale9Grid="10,10,45,35" />
<e:Image source="image/button_up.png" width=“100%” height="100%" />等价于:var image = eui.Image();image.source = "image/button_up.png";image.percentWidth = 100;image.percentHeight = 100; 节点默认属性我们已经知道了复杂属性节点的声明方式,要先显式声明一个属性名称的节点,内部再跟上要赋值的节点。这里还有一个类似语法糖的写法,eui库内的组件,通常都会有一个默认属性,如果子节点是赋值给父节点的默认属性,那么可以省略属性名节点。我们来看一个例子:
<e:Scrollerclass="app.MyScroller"xmlns:e="http://ns.egret.com/eui">
<e:viewport>
<e:Group/>
</e:viewport>
</e:Scroller>
这个例子中,我们将Group实例赋值给了一个滚动容器Scroller的viewport属性。由于viewport是Scroller的默认属性,因此我们可以直接省略<e:viewport>节点,改成如下写法:
<e:Scrollerclass="app.MyScroller"xmlns:e="http://ns.egret.com/eui">
<e:Group/>
</e:Scroller>
默认属性除了支持省略属性名节点外,若默认属性的类型是一个数组,还可以省略Array节点。其实添加子项也只是省略默认属性的一种特例,因为容器的默认属性是elementsContent,类型正是数组。最开始添加子项的那个例子完整写法如下:
<e:Groupclass="app.MyGroup"xmlns:e="http://ns.egret.com/eui">
<e:elementsContent>
<e:Array>
<e:Image/>
</e:Array>
</e:elementsContent>
</e:Group>
当然,我们直接用最简洁的省略默认属性写法即可。
|
内部类 | 除了皮肤,ItemRenderer也是一个典型的使用率很高且不复用的组件。我们现在也可以直接内嵌ItemRender的皮肤到List节点中: |
视图状态 |
也算是语法糖的一种
在根节点上,我们声明了视图状态名称列表 states="up,over,down,disabled",它表示这个皮肤具有up,over,down,disabled这四种状态,当皮肤的currentState属性被逻辑组件设置为这四个状态之一时
1.添加移除对象, includeIn之外,还有一个excludeFrom
2.设置属性。 textColor.down="0x009aff"
|
EUI库 - EXML的更多相关文章
- EUI库 - 皮肤
皮肤分离机制 皮肤分离机制对制作可复用的外观比较有优势 那对于只使用一次的皮肤呢?如果也拆分出两个文件,显然不太方便.这里我们针对单次使用的皮肤定制了内部类的功能 每个组件都有一个chi ...
- EUI库 - 概述
新特性 36k 访问EUI组件宽高时,也会跟原生显示对象的表现一致,立即能得到包含子项的宽高值 统一的显示列表 普通对象和eui对象都可用addChild来添加 一个逻辑组件只管 ...
- EUI库 - 9 - 数据集合 - 列表
List 和DataGroup的区别 1 选中一项 会触发 eui.ItemEvent.ITEM_TAP 事件, 2 有选中项的概念,可以设置 List 里的默认选中项 selectedIn ...
- EUI库 - 9 - 数据集合 - 数组集合
ArrayCollection 当数组内的数据被修改了(增删改),组件能有效的获知 myCollection.addEventListener(eui.CollectionEvent.COLLE ...
- EUI库 - 9 - 数据集合 - 数据容器
DataGroup 设置一个数据源 自动创建内部所需的对象 来完成数据展示 还要设置单条数据的模板 叫ItemRenderer 继承关系 eui.List eui.ListBase e ...
- EUI库 - 容器
eui.UILayer UILayer是Group的子类它只有一个功能,到放到场景上后,宽高永远和场景宽度一致 Group Group 是自动布局的容器基类.如果包含的子项内容太大需要滚动显示 ...
- EUI库 - 自动布局
自适应流式布局 width="100%" top left right horizontalCenter=0 失效验证机制 这些异步过程都封装好了,我们只需要关注那一对方法: ...
- EUI库 - 快速入口之项目配置
egretProperties.json exmlRoot 指定exml文件存放根目录,该路径必须为相对路径,目录内只能有exml文件 themes 主题文件数组,配置所有主题文件路径,该 ...
- EUI库 - 10 - 使用自定义组件
步骤 1 在根节点,添加一个自定义的命名空间 2 可以设置skinName 自定义组件规范 1 不复用的不要用自定义组件 2 属性必须要有默认值(赋值为null也可以),因为TS编译器会把没有默 ...
随机推荐
- 解题报告+板子:luogu P3387 【模板】缩点
题目链接:P3387 [模板]缩点 缩点板子,所谓\(dp\)就是拓扑排序(毕竟可以重走边),像\(SPFA\)一样松弛就好,就是重边极其烦人,还加了排序(绝对自己想的,然鹅拓扑的思路不是). 下面上 ...
- 配置<welcome-file>直接访问请求
方法一.配置welcome-file-list和servlet-mapping <!-- 将默认欢迎页配置为要访问的controller路径 --><welcome-file-lis ...
- springboot#父项目
- 解决dotnet-Angular的跨域(cors)问题
解决dotnet-Angular的跨域(cors)问题 前言 之前学了点 Angular ,打算用 dotnet core 做后端,之前没接触过这方面的东西,理所当然的遇到了跨域问题,之后也解决了,所 ...
- 用go语言实现磁力猫一样的磁力搜索网站
1.页面展示 演示站点 2.程序架构 名称 用途 server 收集torrent数据 worker 收集Hash信息 web 数据展示 Tool 工具 3.安装 在安装环境前您需要配置golang环 ...
- 前端学习笔记系列一:13new Date()的参数
前两天发现手机页面的倒计时在Android上正常显示,在iPhone却不能显示. 后来又发现在ff和ie里也不显示.(以前只在chrome里看过,显示正常). 后来同事改了new Date()里字符串 ...
- Git如何合并Commit
如果你在 push 你的修改之前想要将本地多次修改后的 commit 合并一下变得更好看,可以使用下面的方法. 指定你要合并的 commit 相关的命令有两种 你可以通过指定修改过去的几个 commi ...
- 六种方式实现hibernate查询,及IDE推荐
这些天过的好乱,也许是因为考完试了,心里有些松懈吧.也许是最近发生的事对我有些触动吧.感觉自己都已经不懂自己了.面对一些人的教导,我很感激.因为很多话都对我有非常大的帮助和启发,也让我除了做技术, ...
- python内置函数三
ord() 函数 和 chr() 相反 chr() 是将数字转换成assci码 ord() 是将字符串转换成assci码 显示 pow() 函数 pow(x,y,z) 表示x**y ...
- sklearn的train_test_split()各函数参数含义解释(非常全)
sklearn之train_test_split()函数各参数含义(非常全) 在机器学习中,我们通常将原始数据按照比例分割为“测试集”和“训练集”,从 sklearn.model_selection ...