别指望在NativeWindow里添加Flex组件
別指望在NativeWindow里添加Flex組件
--------------------------------------------------------------------------------
作者: Y.Boy 2009年4月30日
?http://riaoo.com/?p=722
??? 在AIR里,NativeWindow 窗口沒(méi)有 addChild() 方法,那也就是說(shuō),不能把顯示對(duì)象直接添加到 NativeWindow 了。發(fā)現(xiàn) NativeWindow 有 stage 屬性,這個(gè) stage 是 NativeWindow 窗口舞臺(tái),可以往里面添加顯示對(duì)象。本以為就是這么簡(jiǎn)單,但,發(fā)覺(jué)直接往這個(gè) stage 添加 Flex 組件是不行的。就像你想在 flash 里使用 flex 組件一樣,行不通。
?
解決辦法有二:
?1.使用先進(jìn)的 Window 組件,拋棄 NativeWindow;
?2.把你想添加到 NativeWindow 窗口里的組件先通過(guò) addChild() 方法添加 到 WindowedApplication 里,確定所有組件都已經(jīng) createComplete 后,獲得它們的引用。此時(shí),你就可以 close 掉 WindowedApplication,把引用了的組件直接添加到 NativeWindow.stage 里就是了。
?
第一種方法是最佳的,第二種方法是 Window 組件還沒(méi)出現(xiàn)時(shí)的應(yīng)急措施。
?
Flex:Air的NativeWindow和Window的區(qū)別(留意原文的右側(cè)Flash標(biāo)簽云,酷) .
2011-05-15 20:45227人閱讀評(píng)論(0)收藏舉報(bào)
http://blog.csdn.net/huanghr_1/article/details/6422950
推薦原因:在Air窗口中寫(xiě)HtmlTex用到。????
?
?? 由于小軟件開(kāi)發(fā)到后期的時(shí)候發(fā)現(xiàn)自己的美術(shù)功底實(shí)在不夠,于是將程序轉(zhuǎn)為用Flash builder4 beta2開(kāi)發(fā)。但是由于之前幾乎沒(méi)用過(guò)Flex開(kāi)發(fā)過(guò)任何東西,因此不會(huì)Flex,所以在用Flash builder4 beta開(kāi)發(fā)的時(shí)候遇到一些問(wèn)題,解決過(guò)程中很是惱火,其中關(guān)于打開(kāi)新窗口的問(wèn)題很是糾結(jié)。
?
??????? 在開(kāi)發(fā)AIR的過(guò)程中,不免要打開(kāi)一個(gè)主程序窗口之外的窗口,這時(shí)候有3個(gè)方法打開(kāi)新窗口,分別為NativeWindow和Window。事實(shí)上通用的方式使用NativeWindow,而Window是一個(gè)Flex封裝的方法,被封裝在mx.core.Window中,并且內(nèi)部引用了NativeWindow方法,而createRootWindow則是創(chuàng)建一個(gè)基于HTML的窗口。而在使用3個(gè)方法的時(shí)候,NativeWindow的DIY空間更大,但是它有一個(gè)很煩的局限性,那就是不能直接加入Flex組件,只能加入外部Loader進(jìn)來(lái)的SWF或其他元素。
?
??????? 下面只討論前兩種方法。由于插件問(wèn)題,代碼中所有半角雙引號(hào)都被替換為了:" 字符。為了避免錯(cuò)誤,如要復(fù)制代碼,請(qǐng)使用代碼塊上方的工具,點(diǎn)擊“view code”可以在新視窗中查看完整無(wú)錯(cuò)代碼,然后在此視窗復(fù)制即可。
?
??????? 用NativeWindow對(duì)象創(chuàng)建新窗口如下:
??????? var options:NativeWindowInitOptions = new NativeWindowInitOptions();
?????? options.transparent = true;//true/false
?????? options.systemChrome = NativeWindowSystemChrome.NONE;//none/STANDARD
?????? options.type = NativeWindowType.UTILITY;//type="utility";//"normal"//"lightweight"//"utility"
?????? newWindow= new NativeWindow(options);
?????? newWindow.title = "新窗口";
?????? newWindow.stage.align = StageAlign.TOP_LEFT;
?????? newWindow.stage.scaleMode = StageScaleMode.NO_SCALE;
?????? newWindow.activate();
?
???????? 在使用該方法的時(shí)候,你不能向newWindow里面添加任何按鈕、DateChooser之類(lèi)的Flex 組件,但是你可以像新窗口的舞臺(tái)對(duì)象里面添加外部加載SWF和Image等元素,具體方法為:newWindow.stage.addChild(someSprite)。
?
??????? 那么如何在新窗口中動(dòng)態(tài)加入Flex 組件?使用Window方法。代碼如下:
??var newWindow:Window=new Window();
??????? var datePicker:DateChooser=new DateChooser();
?newWindow.transparent=true;
?newWindow.type=NativeWindowType.UTILITY;
?newWindow.systemChrome=NativeWindowSystemChrome.NONE;
?newWindow.addChild(datePicker);
?newWindow.title="新窗口";
?newWindow.height=300;
?newWindow.width=300;
?newWindow.open(true);
???????? 在new一個(gè)Window之前,你需要導(dǎo)入該包:import mx.core.Window;(Flash builder4下)。在使用Window方法創(chuàng)建新窗口的時(shí)候,可以將其transparent屬性設(shè)置為true和flase,在設(shè)置該屬性的時(shí)候必須保證open方法未調(diào)用才能成功,open方法一旦調(diào)用,該屬性會(huì)被設(shè)置為只讀。設(shè)置為false的時(shí)候新窗口將被系統(tǒng)鑲邊,而設(shè)置為true的時(shí)候與NativeWindow不同是這時(shí)進(jìn)行組件鑲邊,即是會(huì)自動(dòng)使用Window內(nèi)建的UI鑲邊,而NativeWindow的transparent被設(shè)置為true的時(shí)候,是沒(méi)有任何鑲邊的。在這一點(diǎn)上我很是惱火,因?yàn)槲壹认朐谛麓翱谥惺褂肍lex組件,又不想有任何鑲邊,于是只有興嘆魚(yú)和熊掌不可兼得……
?
??????? 如何讓魚(yú)和熊掌兼得,本人繼續(xù)探索中……
?
??????? 補(bǔ):后來(lái)在一個(gè)技術(shù)群里面說(shuō)到這個(gè)問(wèn)題的時(shí)候,一個(gè)網(wǎng)友提供了這種方法讓NativeWindow加入Flex組建的方法,即是先New一個(gè)Flex組件,等待改組件創(chuàng)建完成后將Flex組件加入到WindowAppliction里面,再加入到NativeWindow窗口中:
??var options:NativeWindowInitOptions = new NativeWindowInitOptions();
?options.transparent = true;//true/false
?options.systemChrome = NativeWindowSystemChrome.NONE;//none/STANDARD
?options.type = NativeWindowType.UTILITY;//type="utility";//"normal"//"lightweight"//"utility"
?newWindow= new NativeWindow(options);
?newWindow.title = "新窗口";
?newWindow.stage.align = StageAlign.TOP_LEFT;
?newWindow.stage.scaleMode = StageScaleMode.NO_SCALE;
?newWindow.activate();
????
?datePicker=new DateChooser();
?this.addElement(datePicker);
?datePicker.addEventListener(FlexEvent.CREATION_COMPLETE,cp);
?
?function cp(e:FlexEvent):void{
??newWindow.stage.addChild(datePicker);
??datePicker.visible=true;
?}
轉(zhuǎn)載于:https://www.cnblogs.com/ketutyou/archive/2012/02/15/2352458.html
超強(qiáng)干貨來(lái)襲 云風(fēng)專訪:近40年碼齡,通宵達(dá)旦的技術(shù)人生總結(jié)
以上是生活随笔為你收集整理的别指望在NativeWindow里添加Flex组件的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 仿as3的displaylist
- 下一篇: 结构化项目管理:十步法 [摘自:成功的软