Gérer les fenêtres

ChromeOS est compatible avec les applications Android dans plusieurs fenêtres. Le système affiche les applications en conteneurs de fenêtres dont la taille est déterminée par le facteur de forme appareil, comme illustré dans la figure 1.

Figure 1 : Une fenêtre d'application sur différents appareils.

Il est important de concevoir des mises en page qui fonctionnent avec différentes tailles d'écran. Si vous suivez les consignes Android pour prendre en charge différents types d'écrans les tailles d'écran, elle est aussi performante sous ChromeOS.

Cette page explique comment s'assurer que la fenêtre de votre application se lance correctement et se redimensionne. de manière fluide et affiche tout son contenu lorsque sa taille change.

Taille du lancement initial

Les applications peuvent demander leur taille de lancement initiale de différentes manières:

  • Utilisez une taille de lancement uniquement dans les environnements de bureau. Le gestionnaire de fenêtres peut ainsi définir les limites appropriées l'orientation. Pour indiquer une préférence en cas d'utilisation en mode bureau, ajoutez dans les balises Meta suivantes <activity>:
<meta-data android:name="WindowManagerPreference:FreeformWindowSize"
           android:value="[phone|tablet|maximize]" />
<meta-data android:name="WindowManagerPreference:FreeformWindowOrientation"
           android:value="[portrait|landscape]" />
  • Utilisez des limites de lancement statiques. Utilisez <layout> dans l'entrée du fichier manifeste de votre pour spécifier un emplacement "fixe" taille de départ, comme dans l'exemple suivant:
<layout android:defaultHeight="500dp"
            android:defaultWidth="600dp"
            android:gravity="top|end"
            android:minHeight="450dp"
            android:minWidth="300dp" />
  • Utilisez des limites de lancement dynamiques. Une activité peut créer et utiliser ActivityOptions.setLaunchBounds(Rect) lorsque vous créez une activité. Par spécifiant un rectangle vide, vous pouvez agrandir votre application.

Redimensionner les fenêtres

Dans ChromeOS, les utilisateurs peuvent redimensionner la fenêtre d'une application comme d'habitude: en faisant glisser en bas à droite, comme illustré dans la figure 2.

Figure 2. Fenêtre d'application redimensionnable

Lorsque vous utilisez la commande gcloud Classe View:

  • répondre dynamiquement aux modifications de configuration en appelant la méthode onConfigurationChanged(..) Par exemple, vous pouvez ajouter android:configChanges="screenSize|smallestScreenSize|orientation|screenLayout" au fichier manifeste de l'activité. Pour en savoir plus sur la gestion des modifications de configuration, consultez Gérer les modifications de configuration
  • Laissez le système redémarrer l'activité. Dans ce cas, implémentez onSaveInstanceState et utiliser l'architecture ViewModel pour restaurer le précédent enregistré.

Lorsque vous utilisez Jetpack Compose, le comportement de redimensionnement dépend de : comment votre activité est configurée. S'il gère les modifications de façon dynamique, La recomposition est déclenchée lorsque la taille de la fenêtre change. Si l'activité est redémarrées par le système, une composition initiale a lieu après le redémarrage. L'un ou l'autre il est important de créer des mises en page Compose qui s'adaptent aux changements de fenêtre différentes tailles d'écran. Ne partez pas du principe que les tailles sont fixes.

Dimensions de la fenêtre

Demandez à vos activités de lire les dimensions de la fenêtre chaque fois qu'elles démarrent et organisent leur contenu en fonction de la configuration actuelle.

Pour déterminer la configuration actuelle, appelez getResources().getConfiguration() sur l'activité en cours. N'utilisez pas les la configuration de l'activité d'arrière-plan ou de la ressource système. L'activité en arrière-plan n'a pas de taille et la configuration système peut contiennent plusieurs fenêtres avec des tailles et des orientations contradictoires, de sorte qu’aucune peuvent être extraites.

Notez que les tailles de fenêtre et d'écran ne sont pas identiques. Pour obtenir taille de fenêtre en DP, utilisez Activity.getResources().getConfiguration().screenWidth et Activity.getResources().getConfiguration().screenHeight. Vous avez probablement jamais besoin d'utiliser la taille de l'écran.

Limites du contenu

Les limites du contenu d'une fenêtre peuvent changer après le redimensionnement. Par exemple, la zone dans la fenêtre utilisée par l'application peut changer si elle devient trop grande pour s'adaptent à l'écran. Respectez les consignes suivantes :

  • Les applications qui utilisent le processus de mise en page d'Android sont mises en page automatiquement. dans l'espace disponible.
  • Pour éviter cela, les applications natives doivent lire la zone disponible et surveiller les changements de taille contenant des éléments d'interface utilisateur inaccessibles. Appelez les méthodes suivantes pour déterminer taille initiale disponible pour cette surface:

    • NativeActivity.mLastContent[X/Y/Width/Height]()
    • findViewById(android.R.id.content).get[Width/Height]()

    Une surveillance continue peut être effectuée à l'aide d'un observateur:

    • NativeActivity.onContentRectChangedNative()
    • NativeActivity.onGlobalLayout()
    • Ajouter un écouteur à view.addOnLayoutChangeListener(findViewById(android.R.id.content))

    Si l'application met à l'échelle son visuel, faites-le chaque fois que la résolution change.

Redimensionnement libre

ChromeOS permet de redimensionner librement n'importe quelle fenêtre: l'utilisateur peut modifier la taille la largeur, la hauteur et la position à l'écran. De nombreuses applications Android sont écrites au redimensionnement de format libre. Tenez compte des points suivants:

  • La position de l'écran peut changer. Utilisez toujours les pour effectuer des transformations de coordonnées de fenêtre à écran et écran à fenêtre.
  • Si vous utilisez le système d'affichage d'Android, la disposition de vos fenêtres change automatiquement lorsque sa taille change.
  • Si vous n'utilisez pas le système de vues et que vous prenez le contrôle de la surface, votre application doit gère lui-même les changements de taille.
  • Pour les applications natives, utilisez les membres mLastContent ou la vue de contenu pour : déterminer la taille initiale.
  • Lorsque l'application est en cours d'exécution, écoutez onContentRectChangedNative ou Événements onGlobalLayout pour réagir aux changements de taille.
  • Lorsque la taille de l'application change, redimensionnez ou actualisez les mises en page et les illustrations. et mettre à jour les zones de saisie.

Mode plein écran

Le mode plein écran fonctionne de la même manière que sur la version d'Android. Si la fenêtre n'occupe pas la totalité de l'écran, une demande de filtrage complet (masquant tous les éléments d'UI du système) sont ignorés. Lorsque l'application est agrandie les méthodes, mises en page et fonctions normales sont exécutées en plein écran. Les éléments de l'interface utilisateur du système (barre de contrôle des fenêtres et étagère) sont ainsi masqués.

Orientation de l'écran

L'orientation la plus courante d'une application Android est le mode portrait, car c'est ainsi la plupart des téléphones sont tenus. Si le mode portrait est bon pour les téléphones, il est mauvais pour les ordinateurs portables et les tablettes, de préférence en mode paysage. Pour obtenir les meilleurs résultats pour votre application, envisagez de prendre en charge les deux orientations.

Certaines applications Android partent du principe que lorsqu'un appareil est tenu en mode Portrait, la valeur de rotation est Surface.ROTATION_0 Cela peut être le cas pour la plupart des appareils Android. Toutefois, lorsque l'application est dans un certains mode ARC, il est possible que la valeur de rotation pour l'orientation portrait ne soit pas Surface.ROTATION_0

Pour obtenir une valeur de rotation précise lors de la lecture de l'accéléromètre ou d'un capteur capteurs, utilisez l'Display.getRotation() et permutez l'axe en conséquence.

Activité racine et orientation

Une fenêtre d'un Chromebook est composée d'une pile de fenêtres d'activité. Chaque fenêtre de la pile ont la même taille et la même orientation.

Les changements soudains d'orientation et de taille sont déroutants sur un ordinateur de bureau environnement. Le gestionnaire de fenêtres des Chromebooks évite cela d'une manière similaire en mode côte à côte d'Android: l'activité affichée au bas des commandes de la pile les attributs de toutes les activités qui se trouvent au-dessus. Cela peut entraîner des situations inattendues où une activité nouvellement démarrée qui est en mode portrait et non redimensionnable devient paysage. et redimensionnables.

Le mode Appareil a un effet ici: en mode Tablette, l'orientation n'est pas verrouillée, et chaque fenêtre conserve sa propre orientation, comme c'est le cas sur Android.

Consignes concernant l'orientation

Suivez ces consignes pour l'orientation:

  • Si vous n'acceptez qu'une seule orientation, ajoutez les informations au fichier manifeste le gestionnaire de fenêtres en a connaissance avant de lancer l'application. Lorsque vous spécifiez l'orientation et, si possible, l'orientation du capteur. Les Chromebooks sont souvent convertibles, et une application à l'envers nuit à l'expérience utilisateur.
  • Essayez de sélectionner une seule orientation. Éviter de demander une seule orientation dans le fichier manifeste et d'en définir un autre par programmation plus tard.
  • Faites attention lorsque vous modifiez l'orientation en fonction de la taille de la fenêtre. L'utilisateur pourrait obtenir coincé dans une petite fenêtre en mode portrait et ne pourra pas revenir à une vue plus grande en mode paysage.
  • Des commandes de fenêtre dans Chrome vous permettent de basculer entre tous les mises en page. En choisissant la bonne option d'orientation, vous vous assurez que l'utilisateur que la mise en page est correcte après le lancement de l'application. Si une application est disponible en mode portrait et paysage, utilisez le mode paysage par défaut, si possible. Une fois cette option définie, il est mémorisé pour chaque application.
  • Essayez d'éviter les changements d'orientation inutiles. Par exemple, si l'activité l'orientation est en mode portrait, mais l'application appelle setRequestedOrientation(LANDSCAPE) au moment de l'exécution, cela entraîne un redimensionnement inutile de la fenêtre, ce qui est ennuyeux pour et peut redémarrer l'application si celle-ci ne peut pas la gérer. Il est préférable de définir l'orientation une seule fois, par exemple dans le fichier manifeste, et ne la modifier qu'une seule fois si nécessaire.

Autres points à prendre en compte

Voici d'autres éléments à prendre en compte lorsque vous travaillez avec des applications Android dans ChromeOS:

  • N'appelez pas finish() dans la méthode onDestroy de votre activité. Cela entraîne l'appli se ferme lors du redimensionnement et ne redémarre pas.
  • N'utilisez pas de types de fenêtres non compatibles, tels que TYPE_KEYGUARD et TYPE_APPLICATION_MEDIA
  • Accélérer le redémarrage des activités en mettant en cache les objets précédemment alloué.
  • Si vous ne voulez pas que l'utilisateur redimensionne votre application, spécifiez android:resizeableActivity=false dans votre fichier manifeste.
  • Testez votre application pour vous assurer qu'elle gère les modifications dans la taille de fenêtre appropriée.