我們有一個Adobe AIR桌面應用程式。在視窗中,有一個帶有一些按鈕的頂欄。中央按鈕打開了一個下拉式彈出視窗,始終位于螢屏的水平中心。以前沒有滾動條,頂欄和彈出視窗總是水平對齊。但是現在我們引入了水平和垂直滾動條,因此當視窗調整大小時,頂欄不在活動視窗的中心,因此它沒有與彈出視窗對齊。
。請查看圖片。頂欄 -
彈出視窗 -
如果視窗在水平方向上被最大化,那么頂欄和彈出視窗是對齊的。
現在是mxml代碼 -
public function showMainMenu():void
{
log.debug("選單按鈕被點擊。")。
if(animatingMenu)
{
log.debug("抑制選單的顯示。影片已在進行中。")。)
return;
}
animatingMenu = true;
menuButton.visible = true;
mainMenu.visible = true;
PopUpManager.addPopUp(mainMenu, FlexGlobals. topLevelApplication as DisplayObject, true)。)
PopUpManager.centerPopUp(主選單)。
mainMenu.y = -mainMenu.height menuButton.height。
mainMenu.refresh()。
showMenuEffect.play()。
menuButton.visible = false。
}
<fx:Declarations>
<menu:MainMenu id="mainMenu"/>
<s: 移動 id="showMenuEffect"/span> target="{mainMenu}" yFrom="{mainMenu. height menuButton. height}" yTo="-5" effectEnd="menuShowed(event)" duration="1200" />
<s: 移動 id="hideMenuEffect"/span> target="{mainMenu}" yFrom="-5" yTo="{mainMenu。 height menuButton.height}" effectEnd="menuHided(event)" duration="600"/>
</fx:Declarations>
<s:HGroup width="100%"/span>>
<s: VGroup horizontalAlign="center"/span> width="100%" paddingLeft="{this. width / 2 - menuButton.width / 2}">
<s: 按鈕 id="menuButton"/span> automationName="menuButtonShow" click="showMainMenu()" styleName="mainMenuButton" 高度="40" width="200"/>
</s:VGroup>
<s: HGroup horizontalAlign="right"/span> width="100%" paddingRight="48" paddingTop="10">
<desktop:LocaleSelector id="localeSelector"/span>/>
<desktop:ButtonCorner id="buttonCorner"/>/span>
</s:HGroup>/span>
<s: VGroup paddingRight="24" paddingTop="25" horizontalAlign="right">
<s: 按鈕 id="closeScreenButton" visible="false" styleName="closeScreenButton" width="29" height="35"/>
</s:VGroup>
</s:HGroup>
什么應該被改變?我怎樣才能使頂欄始終位于螢屏的中心。我應該創建css檔案來處理這種情況嗎?
uj5u.com熱心網友回復:
這是默認的行為。當你顯示一個彈出式視窗時,你告訴它在.y和.x的位置。當你滾動或調整大小時,你有效地改變了視窗的 "中心",但你從未通知它它已經改變了。
我想嘗試的是為視窗調整大小添加一個監聽器,并且onChange重新確定彈出視窗的中心。
示例代碼(這沒有經過測驗,但應該是有效的):
var widthWatch:ChangeWatcher = ChangeWatcher.watch(this, 'widht', resizeHandler) 。
private var resizeExecuting:Boolean = false;
//this should run as soon as your app does (in most case I do that in creationComplete or initialize() )
private function onCreationComplete(event: 事件):void。
{
widthWatch = ChangeWatcher.watch(this,'width', onSizeChange);
}
//this檢查在實際移動彈出視窗之前是否停止了調整大小。另外,你可以將你的popup.center代碼移到這里。
private function onSizeChange(event: 事件):void
{
if(!resizeExecuting)
callLater(handleResize)。
resizeExecuting = true;
}
private function handleResize() :void
{
PopUpManager.centerPopUp(mainMenu)。
resizeExecuting = false;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/319495.html
標籤:


