参考:
游戏中很多选项卡的UI。
官网教程说的不清楚。以前是用自己写的。这里用Eui的Tab+ViewStack实现一下。
1. 新建Tab的条目皮肤
第一个Image是按钮弹起时显示
第二个Image是按钮选中时显示
第三个Label的标签设置为{data},用于显示ViewStack的内容name
进入exml的源码,设置第一张图片visible.down="false",设置第二张图片visible.disabled="false", visible.up="false"
2. 拖动一个Tab组件到舞台
设置ID为tab,条目皮肤为TabBarSkin,布局为水平排列HorizontalLayout。
进入exml源码,设置数据源dataProvider="viewStack",设置默认选择第一项selectedIndex="0"
3 拖动一个ViewStack到舞台
设置Viewstack的ID为viewstack
拖动3个按钮(或者自定义UI)到viewstack下,这3个按钮就相当于要切换的3个页面。
进入exml源码,设置按钮的name,这个name会映射到TabBarSkin上的Labe的{data}上。
4 代码里操作tab+viewstack
tab监听ITEM_TAP事件
/** * 主页 * @author chenkai 2020.2.16 */ class HomeScene extends eui.Component{ public tab:eui.TabBar; public viewStack:eui.ViewStack; public constructor() { super(); this.skinName = "HomeSceneSkin"; } protected childrenCreated(){ this.tab.addEventListener(eui.ItemTapEvent.ITEM_TAP, this.itemTap, this); } private itemTap(e:eui.ItemTapEvent){ //当点击第一个选项卡按钮时,下面输出为 console.log(e.itemIndex, e.itemRenderer); //0 console.log(e.itemRenderer); //第一个选项按钮实例 console.log(this.viewStack.selectedIndex); //0 console.log(this.viewStack.selectedChild); //viewstack下的第一个Button实例 } }
实际效果:
问题:
1. 当按钮样式不同时,怎么整?
因为Tab用的条目皮肤是TabBarSkin是一个皮肤,当3个按钮,每个按钮外观不同时,就用不了了。
Laya的Tab+Viewstack使用方便,支持3个按钮使用1个皮肤,也支持3个按钮使用3个皮肤,Egret如果要实现,得自己写自定义组件了。