TWaver - 專注UI技術(shù)

          http://twaver.servasoft.com/
          posts - 171, comments - 191, trackbacks - 0, articles - 2
            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

          打造自己的Flex AIR標(biāo)題欄

          Posted on 2012-02-29 14:51 TWaver 閱讀(2353) 評論(0)  編輯  收藏
          有人問如何用代碼禁用Flex AIR程序標(biāo)題欄的最大化, 最小化按鈕, 雖然app.xml文件里面可以控制是否禁用和啟用最大化, 最小化按鈕, 但是無法動態(tài)切換, 因為WindowedApplication.maximizable和WindowedApplication.minimizable是read only的. 下面就介紹一下如何定制自己的AIR程序標(biāo)題欄, 先看下效果(是不是和原生的很像? 完全可以以假亂真了):

          1. 先隱藏原生的標(biāo)題欄: 編輯xxx-app.xml, 找到systemChrome行, 取消注釋, 并設(shè)置值為none:

          <!-- The type of system chrome to use (either "standard" or "none"). Optional. Default standard. -->
              <systemChrome>none</systemChrome>

          2. 構(gòu)造標(biāo)題欄: 先用漸變色填充背景, 然后分別添加關(guān)閉, 最小化, 最大化按鈕以及標(biāo)題. 幸運(yùn)的是Flex的WindowedApplication提供了exit, minimize, maximize和restore方法, 關(guān)閉, 最小化, 最大化以及還原窗口算是非常簡單了:

          <s:Group width="100%" height="20">
                          <s:Rect id="background" left="0" top="0" right="0" bottom="0">
                              <s:fill>
                                  <s:LinearGradient rotation="90">
                                      <s:entries>
                                          <s:GradientEntry color="0xCCCCCC" ratio="0" alpha="1"/>
                                          <s:GradientEntry color="0x999999" ratio=".66" alpha="1"/>
                                      </s:entries>
                                  </s:LinearGradient>
                              </s:fill>
                          </s:Rect>
                          <s:Image source="close.png" click="exit()" width="20" y="2"/>
                          <s:Image source="min.png" click="minimize()" width="20" x="20" y="2"/>
                          <s:Image source="max.png" click="handleMax()" width="20" x="40" y="2"/>
                          <s:Label id="_titlebar" text="TestAir" left="60" top="0" right="0" bottom="0" textAlign="center" verticalAlign="middle"/>
                      </s:Group>
          			3. 給標(biāo)題添加事件, 以達(dá)到拖拽標(biāo)題時, 移動窗口. 這里走了不少彎路(開始用監(jiān)聽鼠標(biāo)移動事件, 計算鼠標(biāo)的移動距離, 以修改nativeWindow的x和y坐標(biāo), 發(fā)現(xiàn)鼠標(biāo)移動過程中, 窗口一直在抖動), 最后發(fā)現(xiàn)WindowedApplication的nativeWindow有startMove方法, 只要在mouse down事件里面調(diào)用此方法, 就可以達(dá)到移動窗口的目的:
          this.addEventListener(Event.ADDED_TO_STAGE, function(e:*):void {
              _titlebar.addEventListener(MouseEvent.MOUSE_DOWN, function (e:MouseEvent):void {
                  nativeWindow.startMove();
              });
          });
          本文完整代碼見附件:AirTitleBar


          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 六盘水市| 马尔康县| 竹北市| 安达市| 津南区| 平远县| 阿鲁科尔沁旗| 绥芬河市| 页游| 莲花县| 武陟县| 铜梁县| 阿巴嘎旗| 龙游县| 廊坊市| 锡林郭勒盟| 宁波市| 洞头县| 读书| 宾川县| 广汉市| 金堂县| 修水县| 阜平县| 腾冲县| 龙游县| 中宁县| 韶关市| 青海省| 宜良县| 齐齐哈尔市| 于田县| 农安县| 革吉县| 锡林郭勒盟| 驻马店市| 台中县| 隆林| 奎屯市| 鞍山市| 砀山县|