Flash viewMenuItems没有';将蒙皮应用于ViewNavigator应用程序时不显示
当我不为ViewNavigator应用程序应用skinClass时,ViewMenuItems工作正常,但当我将自定义外观应用于ViewNavigator时,ViewMenuItems不会出现 我的Main.mxml文件包含Flash viewMenuItems没有';将蒙皮应用于ViewNavigator应用程序时不显示,flash,apache-flex,flash-builder,Flash,Apache Flex,Flash Builder,当我不为ViewNavigator应用程序应用skinClass时,ViewMenuItems工作正常,但当我将自定义外观应用于ViewNavigator时,ViewMenuItems不会出现 我的Main.mxml文件包含 <?xml version="1.0" encoding="utf-8"?> <s:ViewNavigatorApplication xmlns:fx="http://ns.adobe.com/mxml/2009"
<?xml version="1.0" encoding="utf-8"?>
<s:ViewNavigatorApplication xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" firstView="views.MainHomeView" skinClass="skins.CustomApplicationSkin">
<fx:Declarations>
<!-- Place non-visual elements (e.g., services, value objects) here -->
</fx:Declarations>
</s:ViewNavigatorApplication>
CustomApplicationSkin的代码为
<?xml version="1.0" encoding="utf-8"?>
<s:Skin name="CustomApplicationSkin"
xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
>
<fx:Metadata>
<![CDATA[
[HostComponent("Main")]
]]>
</fx:Metadata>
<s:states>
<s:State name="normal" />
<s:State name="disabled" />
</s:states>
<s:BitmapImage width="100%" height="100%" source="@Embed('/assets/background.jpg')"/>
<s:Group id="contentGroup" width="100%" height="100%" minWidth="0" minHeight="0" />
<s:ViewNavigator id="navigator" width="100%" height="100%" />
</s:Skin>
MainHomeView.mxml的代码
<?xml version="1.0" encoding="utf-8"?>
<!-- components\mobile\views\ViewMenuHome.mxml -->
<s:View xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
title="Home">
<fx:Script>
<![CDATA[
// The event listener for the click event.
private function itemClickInfo(event:MouseEvent):void {
switch (event.currentTarget.label) {
case "Add" :
myTA.text = "Add selected";
break;
case "Cancel" :
myTA.text = "Cancel selected";
break;
case "Delete" :
myTA.text = "Delete selected";
break;
case "Edit" :
myTA.text = "Edit selected";
break;
case "Search" :
myTA.text = "Search selected";
break;
default :
myTA.text = "Error";
}
}
]]>
</fx:Script>
<s:viewMenuItems>
<s:ViewMenuItem label="Add" click="itemClickInfo(event);" />
<s:ViewMenuItem label="Cancel" click="itemClickInfo(event);"/>
<s:ViewMenuItem label="Delete" click="itemClickInfo(event);"/>
<s:ViewMenuItem label="Edit" click="itemClickInfo(event);"/>
<s:ViewMenuItem label="Search" click="itemClickInfo(event);"/>
</s:viewMenuItems>
<s:VGroup paddingTop="10" paddingLeft="10">
<s:TextArea id="myTA" text="Select a menu item"/>
<s:Button label="Open Menu"
click="mx.core.FlexGlobals.topLevelApplication.viewMenuOpen=true;"/>
<s:Button label="Close Menu"
click="mx.core.FlexGlobals.topLevelApplication.viewMenuOpen=false;"/>
</s:VGroup>
</s:View>
请协助。有两个问题:
ViewNavigatorApplicationSkin
类是用Actionscript编写的,它扩展了MobileSkin
类,而您的皮肤是用MXML编写的,它扩展了skin
类ViewMenu
对象,方法与默认移动皮肤的构造函数(ViewNavigatorApplicationSkin
)相同
但是,这样做之后,我在运行时尝试打开“视图”菜单时出错。此错误是上述第二个问题的结果:ViewNavigatorApplication
中的代码试图使用addChild()
方法添加菜单,但是,由于自定义皮肤扩展了非移动皮肤
类(本质上是Spark组
),它抛出一个错误,说明您不能使用addChild()
方法,而应该使用addElement()
。此错误是皮肤基于非移动皮肤类(主机组件,ViewNavigatorApplication
,不希望出现这种情况)的直接结果
我建议您通过扩展原始的ViewNavigatorApplicationSkin
类,在Actionscript中创建皮肤。看起来您所做的只是添加一个背景,所以下面的代码可能会起作用。但是,问题是在您的皮肤中,ViewNavigator
和背景图像的宽度/高度都是100%。所以导航器完全覆盖了背景。在我下面的例子中,我给了导航器一些透明度,让背景显示出来。我想你不会想要的,但在你目前的设计中,这是看到图像的唯一方式
package
{
import spark.components.Image;
import spark.skins.mobile.ViewNavigatorApplicationSkin;
public class MyViewNavAppSkin extends ViewNavigatorApplicationSkin
{
public function MyViewNavAppSkin()
{
super();
}
[Embed('Android_Robot_100.png')]
private var embeddedImage:Class;
private var background:Image;
override protected function createChildren():void
{
super.createChildren();
background = new Image();
background.source = new embeddedImage();
addChildAt(background, 0);
navigator.alpha=.5;
}
override protected function layoutContents(unscaledWidth:Number, unscaledHeight:Number):void
{
background.setLayoutBoundsSize(unscaledWidth, unscaledHeight);
background.setLayoutBoundsPosition(0,0);
super.layoutContents(unscaledWidth, unscaledHeight);
}
}
}
问题依然存在。背景图像仅出现在屏幕中间。顶部和底部区域仍然为空。@user2339927嗯,我“帮助”您解决的问题是菜单没有出现。我的示例(我测试过)运行正常,菜单出现,在我的示例中,背景图像覆盖了整个应用程序。。。尽管如此,我需要使导航器透明以查看背景。也许你可以编辑你的帖子并显示你当前使用的代码,但不知道为什么上面的代码对你来说不起作用:)谢谢你的帮助sunil。代码和我上面贴的一样。我刚刚在main.mxml的s:viewNavigator应用程序中将skinClass更改为MyViewNavAppSkin