Criando janelas customizadas com Adobe AIR
O Adobe AIR permite que você personalize as janelas de suas aplicações, por padrão, o Adobe AIR utiliza o layout das janelas do sistema operacional(Windows, Mac ou Linux), no Flex existe a opção de usar a FlexChrome(que particularmente não sou muito fã). Mostrarei um exemplo simples usando o Adobe Flex, Adobe Dreamweaver CS4 e o Adobe Flash CS4.
Se ainda não conhece o Adobe AIR, recomendo que dê uma olhada nesse artigo antes de proseguir com o tutorial
![]()
Adobe Flex

No Flex Builder, crie um projeto do tipo "Desktop application", por padrão ele criará dois arquivos, um .mxml e um .xml responsavel pela configuração do aplicativo.
No arquivo .xml, alteremos as seguintes tags: systemChrome e transparent.
O arquivo final deverá ficar da seguinte maneira:
-
<?xml version="1.0" encoding="UTF-8"?>
-
<application xmlns="http://ns.adobe.com/air/application/1.1">
-
<id>AIR-chrome</id>
-
<filename>AIR_chrome</filename>
-
<name>AIR_chrome</name>
-
<version>v1</version>
-
<initialwindow>
-
<content>[This value will be overwritten by Flex Builder in the output app.xml]</content>
-
<systemchrome>none</systemchrome>
-
<transparent>true</transparent>
-
</initialwindow>
-
</application>
Configuramos para que nossa aplicação não utilize a janela do estilo do sistema operacional e que seja transparente. Se pedirmos pra rodar a aplicação, veremos que aparecerá a janela padrão do Flex (FlexChrome). No entanto não é o que queremos ainda.
No arquivo .mxml, na tag WindowedApplication, setamos a propriedade showFlexChrome para false.
-
<mx :WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" showFlexChrome="false">
-
</ mx:WindowedApplication>
Se pedirmos para rodar novamente, veremos que a janela padrão do Flex também desapareceu. Agora criaremos o restante da aplicação.
Adicione um componente Canvas do tamanho de sua preferência, e adicione três componentes do tipo Button no palco, importante lembrar de colocar uma cor de fundo do Canvas para que sua aplicação seja vista.
-
<mx :Canvas id="cv_back" width="100%" height="100%" cornerRadius="10" borderStyle="solid" backgroundColor="#061D7E">
-
<mx :Button x="262" y="10" label="_" width="35" id="bot_min"/>
-
<mx :Button x="296" y="10" label="M" width="35" id="bot_max"/>
-
<mx :Button x="331" y="10" label="X" width="35" id="bot_close"/>
-
</ mx:Canvas>
Agora adicionemos as ações de minimizar, maximizar-restaurar e fechar a aplicação. Para isso teremos acesso a API propria do Adobe AIR para janelas. Note que para maximizar e restaurar, usamos uma flag para saber se a janela esta ou não maximizada.
-
-
{
-
stage.nativeWindow.minimize();
-
}
-
-
{
-
if(!isMax)
-
{
-
stage.nativeWindow.maximize();
-
isMax = true;
-
}
-
else
-
{
-
stage.nativeWindow.restore();
-
isMax = false;
-
}
-
}
-
-
{
-
stage.nativeWindow.close();
-
}
Agora para completar uma função para que a janela possa ser arrastada com o mouse.
-
{
-
stage.nativeWindow.startMove();
-
cv_back.alpha = 0.5;
-
}
Depois basta adicionar mais uma função que fará os botoes "escutarem" essas funcões. Segue o código completo:
-
<?xml version="1.0" encoding="utf-8"?>
-
<mx :WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" showFlexChrome="false" creationComplete="init();">
-
<mx :Script>
-
<![CDATA[
-
private var isMax:Boolean = false;
-
-
-
public function init():void
-
{
-
cv_back.addEventListener(MouseEvent.MOUSE_DOWN, moveit);
-
cv_back.addEventListener(MouseEvent.MOUSE_UP, nomove);
-
bot_min.addEventListener(MouseEvent.CLICK, minimizar);
-
bot_max.addEventListener(MouseEvent.CLICK, maximizar);
-
bot_close.addEventListener(MouseEvent.CLICK, fechar);
-
}
-
-
private function moveit(e:MouseEvent):void
-
{
-
stage.nativeWindow.startMove();
-
cv_back.alpha = 0.5;
-
}
-
-
private function nomove(e:MouseEvent):void
-
{
-
cv_back.alpha = 1;
-
}
-
-
private function minimizar(e:MouseEvent):void
-
{
-
stage.nativeWindow.minimize();
-
}
-
-
private function maximizar(e:MouseEvent):void
-
{
-
if(!isMax)
-
{
-
stage.nativeWindow.maximize();
-
isMax = true;
-
}
-
else
-
{
-
stage.nativeWindow.restore();
-
isMax = false;
-
}
-
}
-
-
private function fechar(e:MouseEvent):void
-
{
-
stage.nativeWindow.close();
-
}
-
]]>
-
</ mx:Script>
-
<mx:Canvas id="cv_back" width="100%" height="100%" cornerRadius="10" borderStyle="solid" backgroundColor="#061D7E">
-
<mx :Button x="262" y="10" label="_" width="35" id="bot_min"/>
-
<mx :Button x="296" y="10" label="M" width="35" id="bot_max"/>
-
<mx :Button x="331" y="10" label="X" width="35" id="bot_close"/>
-
</ mx:Canvas>
-
</ mx:WindowedApplication>
Para criar aplicativos em Adobe AIR com o Adobe Flash CS3, é necessario fazer uma atualização. Visite Adobe AIR Update for Flash CS3 Professional. O Adobe Flash CS4 já vem com suporte nativo para criar aplicativos em Adobe AIR.
Crie um novo arquivo do tipo "Flash File(Adobe AIR)" e adicione três componentes do tipo "Button" no palco. Eles serão respectivamente os botões de minimizar, maximizar-restaurar,fechar. Na primeira vez que você compila o FLA, ele já cria um arquivo .xml do seu aplicativo. Para configura-lo, basta ir em File->AIR Settings...
Edite as informações com suas preferências, não esqueça de deixar a opção Window Chrome como "Custom Chrome(transparent)", seu arquivo de configuração deve ficar parecido com o abaixo:
-
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
-
<application xmlns="http://ns.adobe.com/air/application/1.1">
-
<id>com.adobe.example.chrome</id>
-
<version>1.0</version>
-
<filename>chrome</filename>
-
<description />
-
<name>chrome</name>
-
<copyright />
-
<initialwindow>
-
<content>chrome.swf</content>
-
<systemchrome>none</systemchrome>
-
<transparent>true</transparent>
-
<visible>true</visible>
-
<maximizable>true</maximizable>
-
<minimizable>true</minimizable>
-
<resizable>true</resizable>
-
</initialwindow>
-
<icon />
-
<customupdateui>false</customupdateui>
-
<allowbrowserinvocation>false</allowbrowserinvocation>
-
</application>
Criei um movieclip azul com o nome de instancia "mc_chrome" para ser como fundo do aplicativo.
Agora colocando as ações nos botões a ser colocado na linha de tempo principal:
-
-
-
{
-
stage.nativeWindow.startMove();
-
mc_chrome.alpha = .5;
-
//mc_chrome.blur
-
}
-
-
{
-
mc_chrome.alpha = 1;
-
}
-
-
////////
-
{
-
stage.nativeWindow.minimize();
-
}
-
{
-
if (!isMax)
-
{
-
stage.nativeWindow.maximize();
-
isMax = true;
-
}
-
else
-
{
-
stage.nativeWindow.restore();
-
isMax = false;
-
}
-
}
-
-
-
{
-
stage.nativeWindow.close();
-
}
Adobe Dreamweaver CS4/CS3

Para usar o Adobe AIR com o HTML/Ajax, utilizarei o Adobe Dreamweaver CS3, mas nada impede de você utilizar seu editor de preferência e compilar usando o SDK do Adobe AIR.
Com o Dreamweaver é possivel ter acesso no code hints a API especifica do Adobe AIR para javascript, basta instalar a seguinte extensão:
Adobe AIR Extension for Dreamweaver
No item "Site" do Dreamweaver aparecerá duas nova opções(Create AIR File e AIR Application Settings). Crie um novo documento HTML e na janela Files, depois va em Site->AIR Application Settings. Preenchendo as informações necessarias, você terá criado um arquivo .xml com as configurações do seu aplicativo, seu conteudo devera estar como abaixo:
-
<?xml version="1.0" encoding="utf-8" ?>
-
<application xmlns="http://ns.adobe.com/air/application/1.1">
-
<filename>air</filename>
-
<customupdateui>false</customupdateui>
-
<name>airteste</name>
-
<id>air</id>
-
<version>1</version>
-
<initialwindow>
-
<content>air.html</content>
-
<height>600</height>
-
<width>800</width>
-
<systemchrome>none</systemchrome>
-
<transparent>true</transparent>
-
<visible>true</visible>
-
</initialwindow>
-
</application>
Mudamos o systemChrome para "none" e transparent para "true", de resto fica a sua preferência.
Adicione três botoes no html para serem respectivamente os botoes de minimizar, maximizar-restaura e fechar:
[html]
Agora criaremos as funções que executarão essas ações, note que estaremos acessando a API especifica do Adobe AIR para javascript.
-
<script language="javascript">
-
var isMax = false;
-
function minimizar()
-
{
-
window.nativeWindow.minimize();
-
}
-
-
function maximizar()
-
{
-
if(!isMax)
-
{
-
window.nativeWindow.maximize();
-
isMax = true;
-
}
-
else
-
{
-
window.nativeWindow.restore();
-
isMax = false;
-
}
-
}
-
-
function fechar()
-
{
-
window.nativeWindow.close();
-
}
-
</script>
A lógica segue a mesma que usamos no Flex e Flash, uma flag para saber se a janela esta ou não maximizada.
Em seguida setamos os botões para que executem as determinadas funções. Segue o código completo:
[html]
[/html]
Download dos arquivos
Criar uma janela customizada da uma liberdade maior para que você crie a aplicação com a "cara do usuário", é um recurso poderoso e por isso mesmo deve ser usado com bastante cuidado, não adianta ter um layout hiper ultra mega power futurista e comprometer a usabilidade do usuário.
Recomendo:
http://www.adobe.com/devnet/air/
Translations:
English Version
6 Comments
Other Links to this Post
RSS feed for comments on this post. TrackBack URI



By Eduardo, January 16, 2009 @ 16:06
Leonardo França,
Gostaria de saber se tem como eu começar uma aplicação AIR em modo fullscreen?
Se tiver como, me dá uma força e diz como faz!!
Abraços
By Leonardo França, February 23, 2009 @ 04:18
http://help.adobe.com/en_US/AIR/1.5/devappsflex/WS5b3ccc516d4fbf351e63e3d118666ade46-7e06.html
By Max Cuiabá, April 10, 2009 @ 10:35
Muito bom Leonardo… Obrigado pela ajuda.. se precisar de mim é só falar.. rs
By Mauro, July 27, 2009 @ 18:11
Salve Leonardo
Tem alguma rotina ou componente que faça o Flex ler conteúdos de outras páginas(sites)tipo, preencher campos ou procurar datas em uma página?
Falow
By Leonardo França, July 28, 2009 @ 15:25
Acredito que seja possivel usando a api de javascript do Adobe AIR
By anderson, September 6, 2009 @ 15:03
este site tem me ajudado muito se quizer entre em contato andersonf_rj@hotmail.com