Exibição de telas no AIR

Adobe AIR 1.0 e posterior

Use a classe Screen do Adobe® AIR® para acessar informações sobre as telas de exibição anexadas a um computador ou dispositivo.

Princípios básicos das telas de exibição no AIR

A API de tela contém uma classe única, Screen, que oferece membros estáticos para obter informações de tela do sistema e membros de ocorrência para descrever uma tela específica.

Um sistema de computador pode ter vários monitores ou exibições anexadas, que podem corresponder a diversas telas da área de trabalho organizadas em um espaço virtual. A classe Screen do AIR fornece informações sobre as telas, sua organização relativa e seu espaço utilizável. Se mais de um monitor for mapeado para a mesma tela, haverá somente uma tela. Se o tamanho da tela é maior que a área de exibição do monitor, não há como determinar que parte da tela está visível atualmente

A tela representa uma área de exibição independente da área de trabalho. As telas são descritas como retângulos na área de trabalho virtual. O canto superior esquerdo da tela designado como exibição principal é a origem do sistema de coordenadas da área de trabalho virtual. Todos os valores usados para descrever a tela são fornecidos em pixels.

Exibir gráfico inteiro
Nessa organização de telas, há duas telas na área de trabalho virtual. As coordenadas do canto superior esquerdo da tela principal (nº 1) são sempre (0,0). Se a organização da tela for alterada para designar a tela nº 2 como tela principal, as coordenadas da tela nº 1 se tornarão negativas. Barras de menu, barras de tarefa e encaixes são excluídos ao reportar limites utilizáveis de uma tela.

Para obter informações mais detalhadas sobre a função da classe API, métodos, propriedades e eventos, consulte a Referência do ActionScript® 3.0 para Adobe® Flash® Platform .

Enumeração das telas

Você pode enumerar as telas da área de trabalho virtual com os seguintes métodos e propriedades de tela:

Método ou Propriedade

Descrição

Screen.screens

Oferece uma matriz de objetos Screen que descreve as telas disponíveis. A ordem da matriz não é significativa.

Screen.mainScreen

Oferece o objeto Screen da tela principal. No Mac OS X, a tela principal é a tela que exibe a barra de menu. No Windows, a tela principal é a tela primária designada pelo sistema.

Screen.getScreensForRectangle()

Oferece uma matriz de objetos Screen que descreve as telas intersectadas pelo retângulo determinado. O retângulo passado para este método está em coordenadas de pixel na área de trabalho virtual. Se nenhuma tela intersectar o retângulo, a matriz ficará vazia. Você pode usar esse método para descobrir em que telas a janela é exibida.

Não salve os valores retornados pelos métodos e propriedades da classe Screen. O usuário ou sistema operacional pode alterar as telas disponíveis e a respectiva disposição a qualquer momento.

O exemplo a seguir usa a API da tela para mover uma janela entre várias telas em resposta ao pressionamento das teclas de seta. Para mover a janela para a próxima tela, o exemplo obtém a matriz screens e a classifica verticalmente ou horizontalmente (dependendo da tecla de seta pressionada). Em seguida, o código passa pela matriz classificada, comparando cada tela com as coordenadas da tela atual. Para identificar a tela atual da janela, o exemplo chama Screen.getScreensForRectangle() , passando nos limites da janela.

package { 
    import flash.display.Sprite; 
    import flash.display.Screen; 
    import flash.events.KeyboardEvent; 
    import flash.ui.Keyboard; 
    import flash.display.StageAlign; 
    import flash.display.StageScaleMode; 
     
    public class ScreenExample extends Sprite 
    { 
        public function ScreenExample() 
        { 
                stage.align = StageAlign.TOP_LEFT; 
                stage.scaleMode = StageScaleMode.NO_SCALE; 
                 
                stage.addEventListener(KeyboardEvent.KEY_DOWN,onKey); 
        } 
     
        private function onKey(event:KeyboardEvent):void{ 
            if(Screen.screens.length > 1){ 
                switch(event.keyCode){ 
                    case Keyboard.LEFT : 
                        moveLeft(); 
                        break; 
                    case Keyboard.RIGHT : 
                        moveRight(); 
                        break; 
                    case Keyboard.UP : 
                        moveUp(); 
                        break; 
                    case Keyboard.DOWN : 
                        moveDown(); 
                        break; 
                }     
            } 
        }     
                 
        private function moveLeft():void{ 
            var currentScreen = getCurrentScreen(); 
            var left:Array = Screen.screens; 
            left.sort(sortHorizontal); 
            for(var i:int = 0; i < left.length - 1; i++){ 
                if(left[i].bounds.left < stage.nativeWindow.bounds.left){ 
                    stage.nativeWindow.x +=  
                        left[i].bounds.left - currentScreen.bounds.left; 
                    stage.nativeWindow.y += left[i].bounds.top - currentScreen.bounds.top; 
                } 
            }  
        } 
         
        private function moveRight():void{ 
            var currentScreen:Screen = getCurrentScreen(); 
            var left:Array = Screen.screens; 
            left.sort(sortHorizontal); 
            for(var i:int = left.length - 1; i > 0; i--){ 
                if(left[i].bounds.left > stage.nativeWindow.bounds.left){ 
                    stage.nativeWindow.x +=  
                        left[i].bounds.left - currentScreen.bounds.left; 
                    stage.nativeWindow.y += left[i].bounds.top - currentScreen.bounds.top; 
                } 
            }  
        } 
 
        private function moveUp():void{ 
            var currentScreen:Screen = getCurrentScreen(); 
            var top:Array = Screen.screens; 
            top.sort(sortVertical); 
            for(var i:int = 0; i < top.length - 1; i++){ 
                if(top[i].bounds.top < stage.nativeWindow.bounds.top){ 
                    stage.nativeWindow.x += top[i].bounds.left - currentScreen.bounds.left; 
                    stage.nativeWindow.y += top[i].bounds.top - currentScreen.bounds.top; 
                    break; 
                } 
            }  
        } 
 
        private function moveDown():void{ 
            var currentScreen:Screen = getCurrentScreen(); 
             
            var top:Array = Screen.screens; 
            top.sort(sortVertical); 
            for(var i:int = top.length - 1; i > 0; i--){ 
                if(top[i].bounds.top > stage.nativeWindow.bounds.top){ 
                    stage.nativeWindow.x += top[i].bounds.left - currentScreen.bounds.left; 
                    stage.nativeWindow.y += top[i].bounds.top - currentScreen.bounds.top; 
                    break; 
                } 
            }  
        } 
         
        private function sortHorizontal(a:Screen,b:Screen):int{ 
            if (a.bounds.left > b.bounds.left){ 
                return 1; 
            } else if (a.bounds.left < b.bounds.left){ 
                return -1; 
            } else {return 0;} 
        } 
         
        private function sortVertical(a:Screen,b:Screen):int{ 
            if (a.bounds.top > b.bounds.top){ 
                return 1; 
            } else if (a.bounds.top < b.bounds.top){ 
                return -1; 
            } else {return 0;} 
        } 
         
        private function getCurrentScreen():Screen{ 
            var current:Screen; 
            var screens:Array = Screen.getScreensForRectangle(stage.nativeWindow.bounds); 
            (screens.length > 0) ? current = screens[0] : current = Screen.mainScreen; 
            return current; 
        }         
    } 
}