Ermitteln, ob die App beide Bildschirme einnimmt

Ein übergreifendes Layout liegt vor, wenn eine einzelne App beide Bildschirme einnimmt. Wenn eine App nicht für dieses Szenario angepasst ist, informiert das System die App standardmäßig darüber, dass sie nun eine größere Bildschirmbreite und -höhe einnimmt. Die Benutzeroberfläche der App passt sich dann selbständig an die neuen Bildschirmabmessungen an.

Weitere Informationen findest du in der Einführung in Doppelbildschirmgeräte im Abschnitt Arbeiten mit der Naht.

Mithilfe dieses Codes lässt sich bestimmen, ob deine App beide Bildschirme einnimmt.

Wichtig

APIs im Surface Duo SDK interagieren mit dem Surface Duo-Gerät und sollten nicht aufgerufen werden, wenn deine App auf anderen Geräten ausgeführt wird. Bevor du diese APIs aufrufst, solltest du prüfen, ob deine App auf einem Surface Duo-Gerät ausgeführt wird. Verwende den Codeausschnitt isDeviceSurfaceDuo, um diese Prüfung durchzuführen.

Diese Sammlung von Methoden kann zusammengestellt werden, um eine isAppSpanned-Überprüfung zu erstellen:

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
    }
}

Verwende die Methode getHinge, um die Begrenzungen für die Position der Scharniermaske abzurufen.

Siehe auch