Déterminer si l’application est répartie
Une disposition étendue se produit quand une même application est présentée sur deux écrans. Par défaut, si une application n’est pas personnalisée pour ce scénario, le système informe l’application qu’elle occupe désormais de plus grandes largeur et hauteur d’écran, et l’interface utilisateur de l’application est automatiquement redimensionnée pour s’ajuster aux nouvelles dimensions d’écran.
Pour plus d’informations, consultez Comment utiliser la jointure dans Présentation des appareils double écran.
Utilisez ce code pour déterminer si votre application est répartie sur les deux écrans.
Important
Les API du SDK Surface Duo interagissent avec l’appareil Surface Duo et ne doivent pas être appelées quand votre application est en cours d’exécution sur d’autres appareils. Avant d’appeler ces API, vous devez vérifier si votre application est en cours d’exécution sur un appareil Surface Duo. Utilisez l’extrait de code isDeviceSurfaceDuo pour effectuer cette vérification.
Cette collection de méthodes peut être composée pour créer une validation isAppSpanned
:
fun getCurrentRotation(activity: Activity): Int {
return try {
val wm = activity.getSystemService(Context.WINDOW_SERVICE) as WindowManager
wm.defaultDisplay.rotation
} catch (e: IllegalStateException) { Surface.ROTATION_0 }
}
fun getHinge(activity: Activity): Rect? {
// Hinge's coordinates of its 4 edges in different mode
// Double Landscape Rect(0, 1350 - 1800, 1434)
// Double Portrait Rect(1350, 0 - 1434, 1800)
return if (isDeviceSurfaceDuo()) {
val displayMask = DisplayMask.fromResourcesRectApproximation(activity)
if (displayMask != null) {
val screensBounding = displayMask.getBoundingRectsForRotation(
getCurrentRotation(activity)
)
if (screensBounding.size == 0) {
Rect(0, 0, 0, 0)
} else {
screensBounding[0]
}
} else { null }
} else { null }
}
fun getWindowRect(activity: Activity): Rect {
val windowRect = Rect()
activity.windowManager.defaultDisplay.getRectSize(windowRect)
return windowRect
}
fun isAppSpanned(activity: Activity): Boolean {
val hinge = getHinge(activity)
val windowRect = getWindowRect(activity)
return if (hinge != null && windowRect.width() > 0 && windowRect.height() > 0) {
// The windowRect doesn't intersect hinge
hinge.intersect(windowRect)
} else {
false
}
}
Utilisez la méthode getHinge
pour récupérer les limites de l’emplacement du masque de charnière.