Forums Développement Multimédia

Aller au contenu

Capabilities.screenResolutionX et simulateur Air ADL

Mobile CODE Actionscript

16 réponses à ce sujet

#1 Jwhy

    Ceinture Marron

  • Members
  • PipPipPipPipPipPip
  • 131 messages

Posté 05 June 2013 - 15:59 PM

Bonjour,


Sur Flash Builder 4.7, quand je teste une application mobile dans le simulateur Air, le paramètre Capabilities.screenResolutionX ne prend jamais les dimensions du Smartphone sélectionné dans le simulateur. A chaque fois les dimensions sont celle de l’ordinateur, ce qui est problématique car les divers éléments de mes interfaces sont placés dynamiquement et proportionnellement à ce paramètre.
Y a t’il une astuce pour que le simulateur Air simule correctement le Smartphone qu’il est sensé simulé … ? -_-

Ou bien y a t’il une solution alternative à Capabilities.screenResolutionX ?

Pour iOS j’utilise le simulateur de Xcode, le Capabilities.screenResolutionX fonctionne très bien en renvoyant les dimensions de l’appareil simulé. Par contre pour Androïd je passe par le simulateur Air et je suis obligé de rentrer à la main les bonnes dimensions pour tester les différentes tailles d'écrans, ce qui est plutot pénible...




  // HTC Wildfire
  //public static var SceneW:int = 240
  //public static var SceneH:int = 320
  //
  // Motorola Defy +
  //public static var SceneW:int = 480
  //public static var SceneH:int = 854
  //
  // Motorola Atrix
  //public static var SceneW:int = 960
  //public static var SceneH:int = 540
  //
  // Motorola XOOM
  //public static var SceneW:int = 1280
  //public static var SceneH:int = 800
  //
  // Samsung Galaxy Tab II
  //public static var SceneW:int = 800
  //public static var SceneH:int = 1280
 
  // DYNAMIQUE
  public static var SceneW:int = Capabilities.screenResolutionX
  public static var SceneH:int = Capabilities.screenResolutionY
 


#2 Henri_B

    Ceinture Noire

  • Members
  • PipPipPipPipPipPipPip
  • 337 messages

Posté 06 June 2013 - 07:57 AM

au passage, ces resolutions sont "theoriques", car il y a souvent une barre de "menu" (sous android en tous cas) qu'on ne peut faire disparaitre, meme si on choisit "plein ecran". pour la motorola xoom par exemple, c'est en realité 1280x752, si tu veux vraiment tester ce que ca donne sur la vraie tablette...

#3 Tonic

    Plop

  • Moderateur
  • PipPipPipPipPipPipPipPip
  • 5712 messages

Posté 06 June 2013 - 11:12 AM

Pour ta version dev dans l'émulateur, peut être que le plus simple est d'utiliser stage.width et stage.height (à récupérer une fois l'application chargée).

++ ^^

#4 Goabonga

  • Moderateur
  • PipPipPipPipPipPipPipPip
  • 2724 messages

Posté 07 June 2013 - 08:55 AM

slt, j'ai un petit lien sympa :
http://screensiz.es/

#5 Jwhy

    Ceinture Marron

  • Members
  • PipPipPipPipPipPip
  • 131 messages

Posté 09 June 2013 - 13:58 PM

Voir le messageTonic, le 06 June 2013 - 11:12 AM, dit :

Pour ta version dev dans l'émulateur, peut être que le plus simple est d'utiliser stage.width et stage.height (à récupérer une fois l'application chargée).

++ ^^

alors j'ai essayé avec stage.width et stage.height mais les deux me retourne "0"




public function start()
{
         this.addEventListener(Event.ADDED_TO_STAGE,added)
}
private function added(e:Event):void
{
         trace(stage.width)
}
//resultat 0
 

J'ai essayé aussi de tracer stage.stageWidth et stage.stageHeight mais quelque soit l'appareil sélectionné par le simulateur Air je me retrouve avec 500 pour stage.stageWidth et 375 stage.stageHeight. je ne sait pas ou il va chercher ces valeurs elles ne sont pas dans mon code. Probablement des valeurs par défaut de flash.

pour l'instant seul Capabilities.screenResolutionX me renvoie une valeur exploitable. ce qui est problématique si effectivement le mode plein écran ne fonctionne pas partout comme le dit Henry_B.

#6 draad

  • Members
  • PipPipPipPipPipPipPipPip
  • 654 messages

Posté 09 June 2013 - 14:35 PM

Salut,

Tu peux simplement te debrouiller comme ceci :


var isItDebugging : Boolean = true;

// Quand on teste sur le PC en emulation
if (isItDebugging)
{
  public static var SceneW :int = 800;
  public static var SceneH  :int = 600;
}
// Quand on est sur la plateforme
else
{
  public static var SceneW :int = Capabilities.screenResolutionX
  public static var SceneH  :int = Capabilities.screenResolutionY
}
 

Et tu passe le variable isItDebugging a true ou false selon tes besoins.
Il te faudra faire un systeme plus complexe si tu tourne sur plusieurs emulateurs afin de ne pas avoir a changer manuellement les valeurs a chaque fois que tu change d'emulation.

Ah et au fait, si tu develloppe pour IOS et Android, attention, sur les plateformes le width et le height sont inversés chez Android ! (en effet, l'un considere la positions standard de la platforme en Portrait, l'autre en Paysage).

#7 Jwhy

    Ceinture Marron

  • Members
  • PipPipPipPipPipPip
  • 131 messages

Posté 09 June 2013 - 14:56 PM

Merci Draad pour ta réponse, mais elle ne résout pas vraiment mon problème. Ce que tu propose reviens à peu prêt à la même chose que ce que je fait aujourd'hui.

Voir le messagedraad, le 09 June 2013 - 14:35 PM, dit :

Ah et au fait, si tu develloppe pour IOS et Android, attention, sur les plateformes le width et le height sont inversés chez Android ! (en effet, l'un considere la positions standard de la platforme en Portrait, l'autre en Paysage).

Ah ?! Etrange, je n'ai pas eu ce problème quand je l'ai testé sur un HTC Desire (2 ou S) je n'ai pas eu de problème d'affichage. Sur quel équipement as tu rencontré ce problème d'inversion ?

#8 draad

  • Members
  • PipPipPipPipPipPipPipPip
  • 654 messages

Posté 09 June 2013 - 15:57 PM

Citation

Ah ?! Etrange, je n'ai pas eu ce problème quand je l'ai testé sur un HTC Desire (2 ou S) je n'ai pas eu de problème d'affichage. Sur quel équipement as tu rencontré ce problème d'inversion ?

Sur Acer A200, mais le problème n'apparrait pas en emulation bien sûr.

Desolé pour la réponse tardive alors :)

#9 Jwhy

    Ceinture Marron

  • Members
  • PipPipPipPipPipPip
  • 131 messages

Posté 10 June 2013 - 08:28 AM

En fait, je ne suis pas vraiment sûr de comprendre ce que tu entends par « width et le height sont inversé chez Androïd » est ce que tu veux juste dire que certains appareils sont par défaut en mode « paysage » (avec une valeur de width plus grande que le height) ou bien que les coordonnées x et y sont inversé sur certains Androïd ? Je n’ai pas trouvé d’informations sur cette inversion du width et du height sur le net, aurais tu quelques liens à me filer ?

Voir le messagedraad, le 09 June 2013 - 15:57 PM, dit :

Voir le messageJwhy, le 09 June 2013 - 14:56 PM, dit :

Ah ?! Etrange, je n'ai pas eu ce problème quand je l'ai testé sur un HTC Desire (2 ou S) je n'ai pas eu de problème d'affichage. Sur quel équipement as tu rencontré ce problème d'inversion ?

Sur Acer A200, mais le problème n'apparrait pas en emulation bien sûr.

Quand je disais que j'ai tester sur un HTC desire S sans voir de problème, je parlais de le tester sur un vrai appareil pas en émulation. je le précise si on ne s'est pas compris.

pour l'Acer 200 je ne l'ai même pas dans la liste des dispositifs à simuler. il y a une mise à jour de Flash Builder à faire? ou bien il faut rajouter les nouveaux appareils à la main ?

#10 draad

  • Members
  • PipPipPipPipPipPipPipPip
  • 654 messages

Posté 10 June 2013 - 16:04 PM

Citation

pour l'Acer 200 je ne l'ai même pas dans la liste des dispositifs à simuler. il y a une mise à jour de Flash Builder à faire? ou bien il faut rajouter les nouveaux appareils à la main ?

La liste inclue dans Flash Builder n'est pas exaustive, loin de la. Tu peux rajouter des appareil manuellement ( comme dans mon cas ) pour ajouter des devices que tu aurais et qui ne seraient pas listes. Je ne sais pas si il y a des mises a jours telechargeables de devices. Cependant, il n'est pas necessaire de tester sur TOUS les devices a mon avis, prends un echantillon de 4 ou 5 devices qui presentent des tailles differentes et cela devrait suffire.


Citation

En fait, je ne suis pas vraiment sûr de comprendre ce que tu entends par « width et le height sont inversé chez Androïd » est ce que tu veux juste dire que certains appareils sont par défaut en mode « paysage » (avec une valeur de width plus grande que le height) ou bien que les coordonnées x et y sont inversé sur certains Androïd ? Je n’ai pas trouvé d’informations sur cette inversion du width et du height sur le net, aurais tu quelques liens à me filer ?

Pas de lien malheureusement, il s'agit d'une decouverte personnelle. Si je compare mon Iphone 4S et ma tablette Android A200 par exemple, l'iphone considere se position "de base" comme Portrait, ce qui signifie que la hauteur de l'ecran (heigth) et plus grande que sa largeur (width), au contraire, ma tablette considere sa position de base comme Paysage, ce qui signifie que la hauteur de l'ecran (heigth) et plus petite que sa largeur (width). Et cela m'a cause beaucoup de problemes au debut de mes develloppements.

Ainsi, si je veux faire une application qui se lis uniquement en mode "Paysage", je dois inverser la recuperation de Capabilities.ScreenResolutionX et Capabilities.ScreenResolutionY sur l'un ou l'autre des types de plateforme.

#11 Goabonga

  • Moderateur
  • PipPipPipPipPipPipPipPip
  • 2724 messages

Posté 10 June 2013 - 17:10 PM

Un projet exemple qui bug svp que je comprenne pourquoi chez moi j'ai pas ce problème :)

Vous utilisez le application-descriptor.xml, vous ne forcez pas le passage par la suite en as ?

Qu'elles sont les paramètres que vous utilisez pour l'aspectRatio et l'autoOrients ?

Vous compilez pour qu'elle version de Air ? Passez vous un -swf-version au compilateur ?

#12 Jwhy

    Ceinture Marron

  • Members
  • PipPipPipPipPipPip
  • 131 messages

Posté 10 June 2013 - 18:32 PM

Goabonga, pour résumer :

Pour mon problème tu lances simplement un projet ActionScript Mobile dans Flash Builder 4.7 et tu fais un trace de la propriété Capabilities.screenResolutionX.
Tu constateras, normalement, que la valeur renvoyée est celle de l’ordi et non pas celle du mobile sélectionné dans le simulateur Air ADL. Le simulateur ne simule que partiellement les mobiles qu’il est sensé simulé -_- .


Voir le messageGoabonga, le 10 June 2013 - 17:10 PM, dit :

Vous utilisez le application-descriptor.xml, vous ne forcez pas le passage par la suite en as ?

Qu’entend tu par « forcer le passage en as »


Voir le messageGoabonga, le 10 June 2013 - 17:10 PM, dit :

Qu'elles sont les paramètres que vous utilisez pour l'aspectRatio et l'autoOrients ?

<autoOrients>false</autoOrients>
<fullScreen>true</fullScreen>
<visible>true</visible>

Pas de paramètre spécifié pour l’aspectRatio


Voir le messageGoabonga, le 10 June 2013 - 17:10 PM, dit :

Vous compilez pour qu'elle version de Air ?

3.7


Voir le messageGoabonga, le 10 June 2013 - 17:10 PM, dit :

Passez vous un -swf-version au compilateur ?

non, a quoi cela sert il ?



A coté de cela il y a plusieurs remarques :
- Henri_B m’a fait remarqué que le mode plein écran ne fonctionne pas sur Androïd car il y a une barre de menu qui est tout le temps visible.
Donc je ne peux pas me baser sur Capabilities.screenResolutionX. il faut que je trouve une autre solution qui me donne la taille de l’espace disponible.
- Tonic a suggérer d’utiliser stage.width et stage.height mais chez moi ça ne marche pas cela renvoie toujours la valeur de 0.
- Draad me fait part d’un problème d’inversion de width et de height sur Androïd par rapport a iOS, problème que je n’ai pas encore rencontré, jusqu'à présent.


Aujourd’hui, j’ai trouvé la propriété stage.fullScreenWidth qui pourrait peut être résoudre mon problème. Mais il faudrait que j’ai la confirmation que cette propriété donne bien les dimensions de l’espace disponible sans la barre de menu (dans l’immédiat je n’ai pas d’appareil Androïd pour le tester)


Un bout de code pour résumer les quelques problèmes :


package
{
import flash.display.Sprite;
import flash.display.StageAlign;
import flash.display.StageScaleMode;
import flash.events.Event;
import flash.system.Capabilities;

public class test extends Sprite
{
  public function test()
  {
   super();
 
   // prend en charge autoOrients
   stage.align = StageAlign.TOP_LEFT;
   stage.scaleMode = StageScaleMode.NO_SCALE;
 
   trace(Capabilities.screenResolutionX) // renvoi la longueur de l'ecran d'ordi et pas celui de l'appareil spécifié dans le simulateur ADL

   this.addEventListener(Event.ADDED_TO_STAGE,added)
  }
  private function added(e:Event):void{
   trace(stage.width) //renvoie 0
  }
}
}
 


#13 Goabonga

  • Moderateur
  • PipPipPipPipPipPipPipPip
  • 2724 messages

Posté 10 June 2013 - 21:39 PM

En debug comme le dit Draad nous utiliserons le stage.stageWidth et stage.stageHeight !

Et sur l'emulateur du coup tu obtiendra quelque chose qui rame mais qui ressemblera a l'application installé sur un mobile.

Aussi non en local c'est le Screen.mainscreen qui est utilisé pour la class Capabilities et donc l'écran de l'ordi, avec un vcnserver tu peux emuler un écran de la taille du telephone et lancer l'emulator sans système de fenêtre c'est ce que je fais avec Jenkins et mvn pour lancer des testunitaire sur les class graphique tu trouveras bcp d'info (des howto run unit test on my server with vncserver) dans les forums de Maven FlexMojos et Jenkins.

Courage :)

#14 Jwhy

    Ceinture Marron

  • Members
  • PipPipPipPipPipPip
  • 131 messages

Posté 10 June 2013 - 22:15 PM

Voir le messageGoabonga, le 10 June 2013 - 21:39 PM, dit :

En debug comme le dit Draad nous utiliserons le stage.stageWidth et stage.stageHeight !

En fait Draad ne disait pas vraiment cela... tu as du lire trop vite les posts.... ;-)
Pour stage.stageWidth et stage.stageHeight comme je le disait dans un des post ci dessus, cela me donne des valeurs de 500x375 quelque soit le mobile dans le simulateur...

#15 Goabonga

  • Moderateur
  • PipPipPipPipPipPipPipPip
  • 2724 messages

Posté 11 June 2013 - 00:05 AM

Etrange moi j'ai les bonnes valeurs !

J'ai testé avec le code suivant:

package
{
import flash.display.Sprite;
import flash.display.StageAlign;
import flash.display.StageScaleMode;
import flash.events.Event;
import flash.system.Capabilities;
import flash.text.TextField;

public class App extends Sprite
{
  public function App()
  {
   super();
   stage.scaleMode = StageScaleMode.NO_SCALE;
   stage.align = StageAlign.TOP_LEFT;
   addEventListener( Event.ENTER_FRAME, getStats );
  }

  private function getStats( event : Event ) : void
  {
   removeEventListener( Event.ENTER_FRAME, getStats );
 
   var textField : TextField = new TextField();
   textField.width = stage.stageWidth - 40;
   textField.height = stage.stageHeight - 40;
   textField.x = 20;
   textField.y = 20;
   textField.border = true;
   textField.multiline = true;
   addChild( textField );
 
   textField.appendText( "Capabilities.screenResolutionX : " + Capabilities.screenResolutionX + "\n" );
   textField.appendText( "Capabilities.screenResolutionY : " + Capabilities.screenResolutionY + "\n" );
   textField.appendText( "Capabilities.screenDPI : " + Capabilities.screenDPI + "\n" );
   textField.appendText( "stage.stageWidth : " + stage.stageWidth + "\n" );
   textField.appendText( "stage.stageHeight : " + stage.stageHeight + "\n" );
   textField.appendText( "stage.fullScreenWidth : " + stage.fullScreenWidth + "\n" );
   textField.appendText( "stage.fullScreenHeight : " + stage.fullScreenHeight + "\n" );  
  }


}
}
 

puis mon descriptor :

<?xml version="1.0" encoding="utf-8" standalone="no"?>
<application xmlns="http://ns.adobe.com/air/application/3.8">
<id>test.orientation.debug</id>
<filename>App</filename>
<name>App-debug</name>
<versionNumber>0.0.0</versionNumber>
<initialWindow>
  <content>App.swf</content>
  <aspectRatio>landscape</aspectRatio>
  <autoOrients>false</autoOrients>
                <fullScreen>true</fullScreen>
                <visible>true</visible>
        </initialWindow>

<android>
                <manifestAdditions><![CDATA[
   <manifest android:installLocation="auto">
                <uses-permission android:name="android.permission.INTERNET"/>
        </manifest>
 
  ]]></manifestAdditions>
        </android>
        <iPhone>
                <InfoAdditions><![CDATA[
   <key>UIDeviceFamily</key>
   <array>
        <string>1</string>
        <string>2</string>
   </array>
  ]]></InfoAdditions>
                <requestedDisplayResolution>high</requestedDisplayResolution>
        </iPhone>
</application>
 

Et en sortie :
Fichier joint  Capture d’écran 2013-06-11 à 01.17.16.png   310.77 Ko   5 téléchargement(s)

Par contre l'emulateur d'android ne rotationne pas.



PS: je viens de lire le thread et je ne capte pas si vous parlez de simulation avec adl ou avec adb ??
Si vous parlez d'emu avec adl je vous conseille de passer à adb c'est lourd mais c'est bien plus fiable!!

#16 Henri_B

    Ceinture Noire

  • Members
  • PipPipPipPipPipPipPip
  • 337 messages

Posté 11 June 2013 - 09:03 AM

Perso je travaille uniquement avec flash cs6 et :
- j'utilise stage.stageWidth qui semble me renvoyer toujours les bonnes valeurs sur mobile
- sur l'ordi, les tailles renvoyées par contre tiennent compte de la taille de mon ecran de pc. si je simule une taille d'ecran d'un mobile plus grand que mon ecran (en mode portrait surtout) alors la taille renvoyée est celle de mon ecran, ca ne va jamais au dela.
- aucun probleme de rotation ou autre. avec ou sans auto rotation, j'ai toujours les bonnes valeurs, pas d'inversion. meme si perso je n'ai pas trop creuser car je n'autorise pas en general l'auto rotation
- sur ma tablette, le mode fullscreen ne cache pas le menu android, ou plutot le cache mais il continue a prendre de la place (on voit une bande noire sans les icones). mais là encore en general je fais en sorte que tout s'adapte, quelque soit la taille (puisqu'apparemment celle que je recupere est ok). donc que ca le cache ou pas, selon le mobile peut etre, et bien je m'en moque.
- j'utilise l'ordi pour simuler des tailles que je ne peux tester en vrai, mais pour moi le test sur un vrai mobile est plus important que les resultats renvoyés par un simulateur. je crois qu'il vaut mieux avoir deux mobiles (tel et tablette) de taille distinctes et representatives pour tester plutot que de se prendre la tete avec des problemes peut etre liés uniquement au simulateur...

#17 Jwhy

    Ceinture Marron

  • Members
  • PipPipPipPipPipPip
  • 131 messages

Posté 11 June 2013 - 14:25 PM

Voir le messageGoabonga, le 11 June 2013 - 00:05 AM, dit :

PS: je viens de lire le thread et je ne capte pas si vous parlez de simulation avec adl ou avec adb ??

ADL le simulateur fourni par défaut avec Flash Builder. C'est marqué dans le titre du Post ;)


Voir le messageGoabonga, le 11 June 2013 - 00:05 AM, dit :

Si vous parlez d'emu avec adl je vous conseille de passer à adb c'est lourd mais c'est bien plus fiable!!

ok je vais essayer de voir avec adb. y a moyen de le coupler avec flash Builder ? ou bien cela fonctionne t'il de manière indépendante ?


Voir le messageHenri_B, le 11 June 2013 - 09:03 AM, dit :

- j'utilise l'ordi pour simuler des tailles que je ne peux tester en vrai, mais pour moi le test sur un vrai mobile est plus important que les resultats renvoyés par un simulateur. je crois qu'il vaut mieux avoir deux mobiles (tel et tablette) de taille distinctes et representatives pour tester plutot que de se prendre la tete avec des problemes peut etre liés uniquement au simulateur...


Je suis bien d'accord que l'idéal est de le tester en réel, ensuite on n'a pas toujours les finances pour le tester sur de nombreux appareils Androïd. J’essaye justement de faire marcher au mieux les simulateurs pour éviter de couteux investissements. les revenus du Play Store n'ont pas grand chose à voir avec ceux de l'App Store : cela ne me pousse pas à m'acheter de nombreux appareils Androïd. Pour l'instant je teste avec les téléphones Androïd de mon entourage proche, mais je ne peux pas squatter leur téléphone toute la journée d'où mon insistance pour faire fonctionner le simulateur de Flash Builder.



1 utilisateur(s) li(sen)t ce sujet

0 membre(s), 1 invité(s), 0 utilisateur(s) anonyme(s)

authorised training centre

Centre de Formation Mediabox - Adobe et Apple Authorised Training Center.

Déclaré auprès de la Direction du Travail et de la Formation Professionnelle

Mediabox : SARL au capital de 62.000€ - Numéro d'activité : 11 75 44555 75 - SIRET : 49371646800035

MEDIABOX, 23, rue de Bruxelles, 75009 PARIS

FFP