EUI库 - 皮肤
| 皮肤分离机制 |
皮肤分离机制对制作可复用的外观比较有优势
那对于只使用一次的皮肤呢?如果也拆分出两个文件,显然不太方便。这里我们针对单次使用的皮肤定制了内部类的功能
|
| 每个组件都有一个childrenCreated()方法,它会在组件初始化完成后回调,子类通常覆盖这个方法来访问一些延迟实例化的子项。 | |
| 皮肤部件 | 在皮肤附加到逻辑组件上时,会自动匹配双方的同名变量和id,这些同名变量就叫做“皮肤部件”(SkinPart) |
| 。当为某个组件定制皮肤时,实际上就分为创建对应的皮肤部件和显示图片素材两部分。如果只添加了图片素材,而没有声明并实例化对应变量名的皮肤部件,逻辑组件将无法正常工作 | |
| 所有的可定制皮肤组件都必须继承自eui.Component或它的子类 | |
| 视图状态 |
可以看出自定义逻辑组件中扩展视图状态的方法就是使用invalidateState()和getCurrentState()这一对方法
|
我们还提供了一种在组件外快速设置视图状态的方法。就是直接对组件的currentState属性赋值即可,例如:button.currentState = "down"; |
|
| 配置主题 |
default.thm.json
{"skins": { "eui.Button": "skins/ButtonSkin.exml"},"exmls": [ ],"autoGenerateExmlsList": true //设为true后,会自动在exmls里生成EXML文件信息}skins 指定组件的默认皮肤,其中键是组件的类名,值是你需要赋值给这个组件skinName属性的值,可以是exml文件路径,也可以是Exml文件上注册的类名
exmls 表示需要主题预加载的 EXML 文件列表。Theme 文件加载之后,它会优先加载这个列表中的EXML文件,由于 EXML 可能会存在相互依赖,所以 Theme
会按照列表中的顺序编译 EXML。你可以监听
egret.Event.COMPLETE 来确认该列表中的EXML已经加载完成autoGenerateExmlsList 表示是否需要使用命令行工具自动生成 EXML 列表。build 命令会查找项目中的 EXML 文件,并根据 EXML 文件的依赖关系自动排序后,放到这个列表中。在项目发布时,命令行工具会将 EXML 文件的内容直接集成到 theme 文件中, 减少网络请求的次数(参考下面的示例)。如果您想要自定义 EXML 列表,请将值设置为
false。设置版本号:防止缓存
"exmls": ["resource/eui_skins/ButtonSkin.exml?v=20151211"] |
| 启用主题 |
public constructor(){this.once(egret.Event.ADDED_TO_STAGE,this.onAddedToStage,this);}public onAddedToStage(event:egret.Event):void{new eui.Theme("resource/default.thm.json", this.stage);}创建了Theme之后,它会开始异步加载指定的主题文件并解析,在加载的过程中,如果已经有组件在创建,也不需要额外处理,这部分组件在主题加载完成后会自动重新查询一次默认皮肤
特别注意一下,主题配置文件只是起到设置默认值的作用,并不能运行时切换所有默认皮肤。因为这么做需要遍历整个显示列表,开销比较大。
|
|
使用自定义的皮肤 方式一
加载文件
|
class TestSkin extends eui.Component {
constructor() {
super();
this.addEventListener(eui.UIEvent.COMPLETE,this.onComplete,this);
this.skinName = "resource/testSkin.exml";// 还可以写成 this.skinName = “mySkin.TestSkin”
}
protected createChildren() {
super.createChildren();
console.log("createChildren")
}
private onComplete():void{
console.log("onComplete");
}
}
直接把skinName设置为exml文件的路径。这种方式要注意的是,在 createChildren 的时候,是获取不到内部组件的,因为此时 exml 文件还没有加载完成,要通过监听 eui.UIEvent.COMPLETE 这个事件获取组件创建完成的消息。
像上面这个例子,console 会先输出 createChildren 再输出 onComplete
需要注意的是:如果已经在主题中加载了 EXML 文件,会先输出 onComplete 再输出 createChildren.
|
| 自定义加载根目录 |
如何想改变resource的位置 可以用EXML.prefixURL来实现
EXML.prefixURL = "another/";//更改目录位置var theme = new eui.Theme("resource/default.thm.json", this.stage);theme.addEventListener(eui.UIEvent.COMPLETE, this.onThemeLoadComplete, this); |
EUI库 - 皮肤的更多相关文章
- EUI库 - 容器
eui.UILayer UILayer是Group的子类它只有一个功能,到放到场景上后,宽高永远和场景宽度一致 Group Group 是自动布局的容器基类.如果包含的子项内容太大需要滚动显示 ...
- EUI库 - EXML
EXML是可以运行时加载解析的 <e:Skin class="skins.ButtonSkin" states="up,down,disabled&qu ...
- 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库 - 自动布局
自适应流式布局 width="100%" top left right horizontalCenter=0 失效验证机制 这些异步过程都封装好了,我们只需要关注那一对方法: ...
- EUI库 - 10 - 使用自定义组件
步骤 1 在根节点,添加一个自定义的命名空间 2 可以设置skinName 自定义组件规范 1 不复用的不要用自定义组件 2 属性必须要有默认值(赋值为null也可以),因为TS编译器会把没有默 ...
- EUI库 - 快速入口之项目配置
egretProperties.json exmlRoot 指定exml文件存放根目录,该路径必须为相对路径,目录内只能有exml文件 themes 主题文件数组,配置所有主题文件路径,该 ...
随机推荐
- IDEA spring mvc整合mybatis
准备工作 IDEA 2019.3.1 MySql 8.0.17 Tomcat 7.0.9 开始步骤 一.创建一个项目,添加Web支持 点击菜单:File->NEW->Project 选择左 ...
- 线程与FORK
1.线程锁的问题 需要调用进程线程锁处理函数 prefork-----获取父亲进程锁----在fork掉用之前,目的是为了在子进程中获取到可释放的锁 parentfork----释放父亲进程锁 chi ...
- 浅析 URL
浅析 URL 参考于维基百科 URL => Uniform Resource Locator : 统一资源定位符 统一资源定位符的标准格式如下: [协议类型]://[服务器地址]:[端口号]/[ ...
- 51nod 1368:黑白棋 二分图最大匹配
1368 黑白棋 题目来源: TopCoder 基准时间限制:1 秒 空间限制:131072 KB 分值: 160 难度:6级算法题 收藏 取消关注 有一个N*M的棋盘(1<=N,M< ...
- HiBench成长笔记——(7) 阅读《The HiBench Benchmark Suite: Characterization of the MapReduce-Based Data Analysis》
<The HiBench Benchmark Suite: Characterization of the MapReduce-Based Data Analysis>内容精选 We th ...
- 【HITB GSEC CTF 2017】1000levels
https://files.cnblogs.com/files/p4nda/498a3f10-8976-4733-8bdb-30d6f9d9fdad.gz #通过阅读天枢战队大佬们的wp调试的结果 首 ...
- Kubernetes——命令行操作
如果集群初始化失败需要的操作: master: kubeadm reset #回答y 执行一条它提示给你的iptables命令即可 node: systemctl stop kubelet ...
- JAVA基础-反射机制
什么是JAVA的反射机制 Java反射是Java被视为动态(或准动态)语言的一个关键性质.这个机制允许程序在运行时透过Reflection APIs取得任何一个已知名称的class的内部信息,包括其 ...
- PowerShell的一些资料整理
年后准备把一些公司的一些祖传脚本给重新弄下,之前的脚本是bat写的,又臭又长,这次就不准备补窟窿了.打算用powershell重写下,这里就整理了一些相关的技术资料. 入门教程: 入门教程可以首选国内 ...
- OLTP和OLAP区别详解
Oracle属于OLTP类型,而gp数据库属于OLAP类型的.具体了解如下: 数据库系统一般分为两种类型,一种是面向前台应用的,应用比较简单,但是重吞吐和高并发的OLTP类型:一种是重计算的,对大数据 ...