有人问如何用代码禁用Flex AIR程序标题栏的最大化, 最小化按钮, 虽然app.xml文件里面可以控制是否禁用和启用最大化, 最小化按钮, 但是无法动态切换, 因为WindowedApplication.maximizable和WindowedApplication.minimizable是read only的. 下面就介绍一下如何定制自己的AIR程序标题栏, 先看下效果(是不是和原生的很像? 完全可以以假乱真了):
打造自己的Flex AIR标题栏

1. 先隐藏原生的标题栏: 编辑xxx-app.xml, 找到systemChrome行, 取消注释, 并设置值为none:

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

 

2. 构造标题栏: 先用渐变色填充背景, 然后分别添加关闭, 最小化, 最大化按钮以及标题. 幸运的是Flex的WindowedApplication提供了exit, minimize, maximize和restore方法, 关闭, 最小化, 最大化以及还原窗口算是非常简单了:

<s:Group width="100%" height="20">
                <s:Rect />
            </s:Group>
			3. 给标题添加事件, 以达到拖拽标题时, 移动窗口. 这里走了不少弯路(开始用监听鼠标移动事件, 计算鼠标的移动距离, 以修改nativeWindow的x和y坐标, 发现鼠标移动过程中, 窗口一直在抖动), 最后发现WindowedApplication的nativeWindow有startMove方法, 只要在mouse down事件里面调用此方法, 就可以达到移动窗口的目的:
this.addEventListener(Event.ADDED_TO_STAGE, function(e:*):void {
    _titlebar.addEventListener(MouseEvent.MOUSE_DOWN, function (e:MouseEvent):void {
        nativeWindow.startMove();
    });
});
本文完整代码见附件:AirTitleBar
 

相关文章:

  • 2021-07-09
  • 2021-06-05
  • 2021-12-28
  • 2021-07-21
  • 2021-06-27
  • 2022-12-23
猜你喜欢
  • 2021-10-20
  • 2021-06-06
  • 2021-06-21
  • 2021-10-07
  • 2022-12-23
  • 2021-12-31
相关资源
相似解决方案