我试图简单地将actionBar向下移动75像素,这样我就可以在那里挤压adMob广告。
我试过了:
navigator.actionBar.y=75;
但是,我没有看到任何视觉上的不同,它没有移动,它没有给我任何错误,但如果我做trace(navigator.actionBar.y);
它声称它是在75 ....即使它显然不在屏幕上
有没有人有任何想法?此外,这只适用于一个视图,我无法使用可在整个应用程序中移动操作栏的解决方案。我只是需要在这个特殊的观点中向下移动。
谢谢!
编辑: @布赖恩, 谢谢你的建议,几乎完成了这一切。我正在尝试在皮肤内部创建一个功能,为adMob广告添加空间。但是,我认为我没有正确地引用该功能,因为当我这样做时我没有得到任何错误,也没有发生任何事情。
<?xml version="1.0" encoding="utf-8"?>
<s:Skin xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark" >
<!-- host component -->
<fx:Metadata>
[HostComponent("spark.components.ViewNavigator")]
</fx:Metadata>
<fx:Script>
<![CDATA[
public function adMobVisible(trueOrFalse:Boolean):void
{
if(trueOrFalse)
{
main_group.top=70;
}
else
{
main_group.top=0;
}
}
]]>
</fx:Script>
<!-- states -->
<s:states>
<s:State name="landscapeAndOverlay" />
<s:State name="portraitAndOverlay" />
<s:State name="landscape" />
<s:State name="portrait" />
<s:State name="disabled" />
<s:State name="normal" />
<!-- <s:State name="admob" /> -->
</s:states>
<s:VGroup id="main_group" width="100%" height="100%">
<s:ActionBar id="actionBar" width="100%" />
<s:Group id="contentGroup" width="100%" height="100%" />
</s:VGroup>
</s:Skin>
我做了:
import skins.AdMobHolderSkin;
protected var ad:AdMobHolderSkin = new AdMobHolderSkin();
up top ...然后我只是尝试做一个简单的事情:
ad.adMobVisible(true);
但没有任何反应。有任何想法吗?感谢您的帮助。
答案 0 :(得分:2)
如果您检查ViewNavigatorSkin
的代码,您会发现它使用简单的数学方法列出了它的两个项目(ActionBar
和Group
)。换句话说,它没有使用布局容器,其中设置top
或y
会产生任何影响。
相反,您需要为ViewNavigator
设置外观。首先,定义皮肤(注意我如何在top="75"
中设置VGroup
:
<强> VNSkin.mxml 强>
<?xml version="1.0" encoding="utf-8"?>
<s:Skin xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark">
<!-- host component -->
<fx:Metadata>
[HostComponent("spark.components.ViewNavigator")]
</fx:Metadata>
<!-- states -->
<s:states>
<s:State name="landscapeAndOverlay" />
<s:State name="portraitAndOverlay" />
<s:State name="landscape" />
<s:State name="portrait" />
<s:State name="disabled" />
<s:State name="normal" />
<s:State name="moved" />
</s:states>
<s:VGroup width="100%" height="100%" top="0" top.moved="75">
<s:ActionBar id="actionBar" width="100%" />
<s:Group id="contentGroup" width="100%" height="100%" />
</s:VGroup>
</s:Skin>
然后,在我的主应用程序中,我将使用ViewNavigator来使用这个皮肤:
<强> myApp.mxml在强>
<?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.ActionbarMoveHomeView" applicationDPI="160" >
<fx:Style>
@namespace s "library://ns.adobe.com/flex/spark";
s|ViewNavigator {
skinClass: ClassReference("VNSkin")
}
</fx:Style>
</s:ViewNavigatorApplication>
最后,在我看来,我需要设置状态并在视图激活和停用时将其恢复:
<强> MyView.mxml 强>
<?xml version="1.0" encoding="utf-8"?>
<s:View xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark" title="HomeView">
<fx:Declarations>
<!-- Place non-visual elements (e.g., services, value objects) here -->
</fx:Declarations>
<s:viewActivate>
navigator.skin.currentState = "moved";
</s:viewActivate>
<s:viewDeactivate>
navigator.skin.currentState = "normal";
</s:viewDeactivate>
<s:Label text="test" click="navigator.pushView(SecondPage)" />
</s:View>
请注意,此技术会增加一些开销,因为您的ViewNavigator
皮肤现在是MXML而不是纯ActionScript。您可以考虑使用基于ViewNavigatorSkin
源代码的纯ActionScript创建皮肤,以便您可以将其与偏移量放在一起......但如果您没有注意到MXML皮肤的巨大性能损失,我就不会'担心它。
修改强>
在我写完答案之后我注意到你只想要一个视图。我做了一个修改,将状态添加到VNSkin
类,然后在视图代码(viewActivate
和viewDeactivate
中切换状态。对于记录,这一切都感觉像是一个黑客。我会考虑某种通知机制,以便你可以与皮肤进行通信,以便以不同于此的方式进行更改...但我至少让你通过一种技术来实现这一目标。我会我喜欢看到有人来这里并提出更好的建议。在那之前,你有一些有用的东西:P