Le guide le plus complet pour l'adaptation de l'écran pliable Android est ici

Avec la sortie de Samsung Galaxy Fold et Huawei Mate X, les téléphones à écran pliable ont commencé à attirer l'attention de tous. Tout en changeant l'expérience du téléphone mobile, cela apporte également plus de défis à nos développeurs en matière d'adaptation. Cet article vous présente certains concepts liés aux écrans pliants dans le développement Android et comment les adapter aux écrans pliants.

Adaptation à l'écran pliant

La raison pour laquelle le paravent doit être adapté est que la taille de l'écran sur lequel s'exécute notre application peut changer.Cette situation posera des problèmes pour les projets existants.

Par conséquent, l'essence de l'adaptation de l'écran pliable est la suivante: lorsque l'application est en cours d'exécution, la taille, la densité ou le rapport de l'écran change, et l'application peut continuer à s'afficher et à fonctionner normalement sur l'écran modifié.

En effet, cette situation ne se produit pas après l'apparition du paravent, la même situation se produit dans la commutation verticale et horizontale des applications, mais de nombreuses applications sont obligées d'être verticales et n'ont pas besoin de faire face à cette adaptation.

Autoriser la modification de la taille de l'application

Pour s'adapter au paravent, la première chose est de laisser l'application prendre en charge le changement dynamique de taille, nous devons déclarer sous l'application ou l'activité correspondante dans le menifest:

android:resizeableActivity="true"

 

Au contraire, si vous ne prévoyez pas de vous adapter pour le moment, définissez simplement ce paramètre sur false.

Il convient de noter que ce paramètre est défini par défaut sur true dans Android 7.0 ou version ultérieure, et que les valeurs par défaut suivantes sont false.

Deux concepts liés à ce paramètre sont présentés ci-dessous.

Mode écran partagé

La raison pour laquelle resizeableActivity est changé par défaut sur true à partir d'Android 7.0 est qu'une nouvelle fonctionnalité a été ajoutée dans la version 7.0, appelée mode écran partagé.

Si resizeableActivity est défini sur false, cela signifie que l'application ne prend pas en charge le mode écran partagé et détermine si l'application dispose d'un paramètre d'écran partagé.

Le mode de compatibilité

Lorsque resizeableActivity est défini sur false, l'écran de dépliage et de pliage peut devenir un tel effet:

Cet effet est similaire à l'utilisation d'une application iPhone incompatible sur l'iPad. Ce mode rempli de noir autour d'elle est appelé mode de compatibilité.

L'affichage du mode de compatibilité est lié au rapport maximal pris en charge maxAspectRatio. Lorsque le rapport d'écran dépasse maxAspectRatio, il sera rempli de bordures noires. La recommandation officielle est de définir maxAspectRatio sur 2,4 (12: 5). La méthode pour modifier maxAspectRatio est la suivante:

  • Android 8.0 ou supérieur

Configurez android: maxAspectRatio dans la balise <activity>:

 

<activity android:name=".MainActivity"
          android:maxAspectRatio="2.4" />
  • Android 8.0 ou inférieur

Ajoutez une méta-données nommée android.max_aspect dans la balise <application>:

 

<meta-data android:name="android.max_aspect" android:value="2.4" />

Si resizeableActivity est défini sur true, il n'est pas nécessaire de définir maxAspectRatio, et il ne prendra pas effet s'il est défini.

Changement de taille du moniteur

Par défaut, lorsque l'écran change, le système détruira et recréera toute l'activité. Mais nous espérons qu'après le changement d'écran, le programme pourra continuer à s'exécuter dans l'état avant le basculement, sans redémarrer la page.

Nous pouvons ajouter une configuration à l'activité:

 

android:configChanges="screenSize|smallestScreenSize|screenLayout"

Après cette configuration, lorsque l'écran change, l'activité ne sera pas redémarrée et la méthode onConfigurationChanged sera appelée. Nous pouvons obtenir les informations d'écran actuelles dans cette méthode:

 

@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
    Log.i("config", "newConfig.screenHeightDp:" + newConfig.screenHeightDp
            + ", newConfig.screenWidthDp" + newConfig.screenWidthDp);
}

Après ce changement, vous devez faire attention aux tests pour voir si la mise en page de la page est désordonnée. Si la mise en page est déraisonnable, vous devez modifier la mise en page pour l'adapter aux différentes résolutions.

Nous pouvons également mettre à jour la mise en page en fonction des informations de l'écran, comme le passage de LinearLayout à GridLayout sur grand écran pour utiliser pleinement l'espace d'affichage du grand écran. Il s'agit d'une autre approche d'optimisation:

Android Q

Sur le prochain Android Q, certaines fonctionnalités prenant en charge les écrans pliants ont été ajoutées.

Multi-CV

Pour le mode écran partagé, dans le passé, l'écran partagé ne prenait en charge que l'affichage simultané de deux applications, alors que le grand écran a apporté plus de possibilités. Il permet désormais d'afficher plus de deux applications simultanément.

Dans les versions précédentes d'Android Q, dans les applications s'exécutant en mode écran partagé, seule l'activité qui obtenait le focus était dans l'état onResume, et les autres activités visibles seraient dans l'état onPause.

Sur Android Q, toutes les activités visibles de niveau supérieur sont dans l'état onResume pour garantir que les activités visibles en mode écran partagé peuvent s'exécuter normalement. Mais il n'y a encore qu'une seule activité qui peut obtenir le focus. Nous appelons cette activité TopResumedActivity.

Une méthode de rappel de cycle de vie onTopResumedActivityChanged () a été ajoutée à l'activité d'Android Q. Elle sera appelée lorsque l'activité obtient ou perd le focus. Elle peut être utilisée pour déterminer si l'activité actuelle a le focus:

 

protected void onTopResumedActivityChanged(boolean topResumed) {
    if (topResumed) {
        // 获取到焦点
    } else {
        // 失去焦点
    }
}

Cette méthode est utilisée lorsque nous utilisons des ressources exclusives. Qu'est-ce qu'une ressource exclusive? Les microphones et les caméras le sont, ces ressources ne peuvent être utilisées que par une activité à la fois.

Par exemple, plusieurs activités en mode écran partagé utilisent toutes la caméra, mais seule l'activité qui a le focus a des droits d'accès. Dans ce cas, onTopResumedActivityChanged () est utilisé pour déterminer si l'activité en cours a le focus. Il n'est pas nécessaire de relâcher l'appareil photo lorsque la mise au point est perdue, mais vous devez gérer la situation où l'appareil photo est déconnecté et reconnecté.

minAspectRatio

Avant Android Q, seul le ratio de prise en charge maximum maxAspectRatio peut être configuré. Désormais, Android Q peut configurer le ratio de prise en charge minimum minAspectRatio. L'
utilisation est la même que maxAspectRatio:

 

<activity android:name=".MainActivity"
          android:maxAspectRatio="2.4"
          android:minAspectRatio="1"/>

Le rapport de prise en charge maximum et minimum n'est utile que lorsque resizeableActivity est défini sur false.

débogage

Bien sûr, le meilleur outil de débogage est d'utiliser la vraie machine, mais actuellement seul un petit nombre de personnes ont cette condition. Voici deux schémas de débogage autres que la vraie machine.

Studio Android

Dans Android Studio 3.5, une machine virtuelle pour les appareils à écran pliable a été ajoutée. Nous pouvons en créer une pour déboguer:

En cliquant sur le bouton du simulateur, nous pouvons basculer l'état réduit et développé de la machine virtuelle:

Ligne de commande

Nous pouvons modifier dynamiquement la résolution du téléphone mobile via la ligne de commande pour obtenir l'effet de simulation de la commutation d'écran pliable. En prenant la résolution de Mate X comme exemple, nous utilisons d'abord la ligne de commande:

 

adb shell wm size 1148x2480

La résolution du téléphone sera simulée à 1148x2480, qui est la résolution de Mate X lorsqu'il est plié, puis entrez:

 

adb shell wm size 2200x2480

La résolution du téléphone mobile est modifiée à la résolution étendue du Mate X 2200x2480, qui simule la commutation de l'expansion de l'écran pliable.

Vous pouvez à nouveau modifier la résolution à 1148x2480 pour simuler le basculement du pliage de l'écran. Enfin, après avoir joué, utilisez la ligne de commande suivante pour restaurer la résolution du téléphone lui-même:

 

adb shell wm size reset

Pour résumer

En général, si vous souhaitez vous adapter à l'écran pliable, la première étape consiste à définir resizeableActivity sur true, puis à configurer configChanges pour l'activité et à la tester. Enfin, vous pouvez faire un pas de plus et concevoir un autre ensemble d'interface utilisateur pour le grand écran, et changer d'interface lorsque l'écran pliable est commuté.

 

 

Je suppose que tu aimes

Origine blog.csdn.net/weixin_40611659/article/details/108747360
conseillé
Classement