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.