Partager via


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.

Voir également