由于目前正在使用 Flex Mobile 开发移动应用程序,因此需要完成一些事情并进行一些精细的视觉布局调整。由于我的应用程序是使用TabbedViewNavigatorApplication在部分中构建的,因此我想添加和微调出现在TabbedViewNavigator #tabBar 选项卡中的图标。嗯,这是那些似乎需要几分钟的任务之一,最后是搜索 Adobe api 文档并在谷歌上搜索了几个小时,最终在几天内找到了解决方案。说所以我想发布我的解决方案,希望有人需要它并在他们自己的特定情况下使用它。
这里首先要提到的是,Adobe 在默认情况下,有一个广泛的帮助库,用于对 spark 组件进行蒙皮,但最终 - 这些示例通常只触及特定情况和/或实施所需的表面。
首先我想说我避免使用mxml皮肤,并且总是使用ClassReference在 AS3 类中做我的火花皮肤工作。在我看来,这种方法比 mxml 中的过度垃圾邮件更加灵活、优雅和干净。虽然有时更难实施。
因此,您典型的最小 TabbedViewNavigator 应用程序如下所示:
<?xml version="1.0" encoding="utf-8"?>
<s:TabbedViewNavigatorApplication xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark" applicationDPI="160" applicationComplete="onApplicationComplete(event)">
<fx:Style source="MyStyles.css" />
<fx:Script>
<![CDATA[
import spark.components.ViewNavigator;
private function onApplicationComplete(e:Event):void {
for each(var vn : ViewNavigator in this.navigators){
/// do something with your VN's ...
vn.icon = "./assets/myFaboulousIcon.png";
}
}
]]>
</fx:Script>
<s:ViewNavigator label="one" width="100%" height="100%" firstView="views.oneView"/>
<s:ViewNavigator label="two" width="100%" height="100%" firstView="views.twoView"/>
<s:ViewNavigator label="three" width="100%" height="100%" firstView="views.threeView"/>
</s:TabbedViewNavigatorApplication>
在这个典型配置中,您可以访问ViewNavigator图标属性并在您的 mxml 或 AS3 中设置它(例如在上面的 for 循环中),最终添加一个 switch 语句来为每个选项卡选择不同的图标......但这就是您的故事结束。当某个ViewNavigator由可视组件表示时,使用 ViewNavigator 图标属性。这意味着在您的#tabBar 中,ViewNavigator在视觉上表示为导航器堆栈的一部分,并且是合乎逻辑的 - 在这种情况下,它使用指定的图标。
现在让我们假设现在您想以编程方式更改 alpha 或为您的图标着色,这意味着您总是使用一组图标但在不同的情况下——你给它们不同的视觉属性,其中一种情况可能是——它们在应用程序中的视觉吸引力#标签栏。
图标属性是图标图像文件的路径,并且作为类型是通用对象。所以你不能改变 alpha 或用它做任何其他事情。这两个图标属性都不会为您提供对包含图标本身的显示对象的任何引用,也不会为您提供多汁的 AS3 jonglery pokery 所需的任何其他内容...
对于这样的任务,我们必须做一些漂亮的火花蒙皮(在 AS3 中);)所以请阅读下面的答案