一 官方教程
http://developer.egret.com/cn/github/egret-docs/extension/EUI/skin/theme/index.html
二 thm主题文件解析
default.thm.json皮肤主题文件范例:
{ "skins": { "eui.Button": "resource/eui_skins/ButtonSkin.exml" }, "autoGenerateExmlsList": false, "exmls": [ "src/HomeSceneSkin.exml" ] }
skins:
将exml和ts绑定。
如果绑定,则在新建eui.component不需要设置skinName了。
如果没有绑定,则需要在eui.component的contruct中设置this.skinName = ""。
autoGenerateExmlsListtrue:发布时将exmls下皮肤自动合并到default.thm.json文件中false:不会将exmls下的皮肤自动合并到default.thm.json文件中 exmls:在Main.ts加载主题文件时,预加载exmls列表中的皮肤
let theme = new eui.Theme("resource/default.thm.json", this.stage);
三 exml的几种使用方式:
1 直接引用
public constructor() { super(); this.addEventListener(egret.Event.COMPLETE, this.onComplete, this); this.addEventListener(egret.Event.ADDED_TO_STAGE, this.onAddToStage, this); this.skinName = "src/HomeSceneSkin.exml"; }
执行顺序。在exml未预先加载的情况下,实时加载。
chilrenCreated
addToStage
exml加载完成
onComplete
2 其他方式不怎么用。。具体看官方教程
四 皮肤多文件管理
多个json皮肤文件,分类加载不同皮肤,减轻一次性加载大量皮肤解析压力。
需要自己管理exml的加载顺序,因为exml之间可能有依赖关系。
let theme = new eui.Theme("resource/default.thm.json", this.stage); let theme2 = new eui.Theme("resource/default2.thm.json",this.stage); theme2.addEventListener(eui.UIEvent.COMPLETE, this.onThemeLoadComplete, this);
default.thm.json
{ "skins": { }, "autoGenerateExmlsList": false, "exmls": [ "src/SimpleButtonSkin.exml" ] }
default2.thm.json
{ "skins": { }, "autoGenerateExmlsList": false, "exmls": [ "resource/eui_skins/ButtonSkin.exml", "src/HomeSceneSkin.exml" ] }
另外一说,wing2.5和3都会强行自动修改thm的json文件。。。
时间: 2024-11-08 20:13:26