Subspace-Modifikatoren

XR‑Geräte, für die der Leitfaden gilt
Dieser Leitfaden hilft Ihnen dabei, Erlebnisse für die folgenden Arten von XR-Geräten zu entwickeln.
XR-Headsets
Kabelgebundene XR-Datenbrille

Ein SubspaceModifier ähnelt einem Compose-Modifikator für Composables in einem Subspace. Mit einem SubspaceModifier können Sie Composables im 3D-Raum bearbeiten und so 3D-Layoutknoten positionieren, drehen und ihnen Verhaltensweisen hinzufügen.

Layout

Standardmäßig ist ein Subspace durch den empfohlenen Bereich für die Anzeige einer App begrenzt. Diese Grenzen werden verwendet, wenn das Layout Ihrer Unterbereichskomponenten gemessen wird, ähnlich wie die Grenzen in 2D-Compose-Layouts.

Füllgrenzen

Mit den Modifikatoren fillMaxSize, fillMaxWidth, fillMaxHeight und fillMaxDepth können Sie festlegen, dass Inhalte die Grenzen des übergeordneten Elements (teilweise) ausfüllen. Mit Füllmodifikatoren können Sie in Ihrer App Inhalte unabhängig von den Displayeigenschaften des XR-Geräts darstellen.

Größe und erforderliche Größe festlegen

Die Modifikatoren size, width, height und depth deklarieren die bevorzugte Größe des Inhalts. Wenn Sie die genaue Größe des Inhalts angeben möchten, verwenden Sie requiredSize, requiredWidth, requiredHeight und requiredDepth. Diese Einheiten müssen in dp angegeben werden. Verwenden Sie Meter.toDp(), um Meter in dp umzurechnen.

Kompositionen positionieren

offset

Mit dem Modifikator offset wird die zusammensetzbare Funktion im 3D-Raum entlang der x-, y- und z-Achse verschoben. Diese Einheiten müssen in dp angegeben werden. Verwenden Sie Meter.toDp(), um Meter in dp umzurechnen.

rotate

Mit dem Modifikator rotate wird das angegebene Compose-Element im Raum gedreht. Sie können die Richtung und den Grad der Drehung auf verschiedene Arten angeben:

  • Mit Nick-, Gier- und Rollwinkel, die die Drehung um die x-, y- und z-Achse angeben,
  • Mit einem axisAngle, einem Vector3, das die Rotationsachse darstellt, und der Anzahl der Grad, um die rotiert werden soll,
  • Verwenden Sie einen Quaternion, der die Rotation darstellt.

rotateToLookAtUser

Der Modifikator rotateToLookAtUser dreht den Inhalt kontinuierlich, sodass er immer dem Nutzer zugewandt ist. Sie können diesen Modifikator auch verwenden, um einen „Billboard“-Effekt zu erzielen, bei dem sich der Inhalt auf der Y-Achse zum Nutzer dreht, aber aufrecht und an der Schwerkraft ausgerichtet bleibt. Kombinieren Sie dazu den Modifikator rotateToLookAtUser mit dem Modifikator gravityAligned.

Kompositionen verschieben und ihre Größe anpassen

Nutzer können die Position und Größe von Objekten im 3D-Raum direkt ändern.

Elemente verschieben

Wenn der Modifikator movable vorhanden und aktiviert ist, werden ziehbare UI-Steuerelemente angezeigt, mit denen der Nutzer das Element im 3D-Raum verschieben kann. Sie können movable-Modifikatoren auf eine gesamte Subspace, räumliche Layoutkomponenten (wie SpatialRow und SpatialColumn) und einzelne Komponenten (wie SpatialPanel und SpatialGltfModel) anwenden.

Das genaue Verhalten dieser Bewegung wird durch die angegebene movePolicy definiert:

  • MovePolicy.Default (oder MovePolicy.system()): Das System übernimmt die Bewegung vollständig und berechnet und wendet die neue Position und Skalierung automatisch basierend auf der Nutzereingabe an.
  • MovePolicy.custom(): Das System berechnet den Ziel-Pose basierend auf der Eingabe, wendet ihn aber nicht automatisch auf das zugehörige Element an. Das ist nützlich, um Bewegungen einzuschränken oder benutzerdefinierte Bewegungen in Ihrer App zu erstellen.
  • MovePolicy.anchor(): Ermöglicht dem Nutzer, das bewegliche Element an erkannten realen Ebenen auszurichten und zu verankern.

Anker-Kompositionen

Wenn Sie ein bewegliches Subspace-Composable an realen Oberflächen verankern möchten, übergeben Sie MovePolicy.anchor() an den Modifikator movable. Mit dieser Richtlinie können Nutzer Elemente wie SpatialPanel und SpatialGltfModel an physischen Oberflächen wie Tischen, Wänden oder Böden andocken.

Mit den folgenden Parametern können Sie filtern, an welchen erkannten Ebenen ein Element einrasten kann. Wenn Sie die Parameter leer lassen, kann das Element an jeder erkannten Ebene verankert werden:

  • anchorPlaneOrientations: Eine Reihe von PlaneOrientation-Werten (Horizontal, Vertical oder Any).
  • anchorPlaneSemantics: Eine Reihe von PlaneSemantic-Werten (Wall, Floor, Ceiling, Table oder Any).

Größe von Elementen anpassen

Wenn der Modifikator resizable() vorhanden und aktiviert ist, werden UI-Steuerelemente angezeigt, mit denen der Nutzer die Größe des Elements im 3D-Raum anpassen kann. Das genaue Verhalten der Größenänderung wird durch die angegebene resizePolicy definiert:

  • ResizePolicy.default(): Das System verarbeitet die Geste zur Größenänderung automatisch und wendet die neuen Abmessungen auf den Inhalt an.
  • ResizePolicy.custom(): Das System stellt ein SpatialResizeEvent bereit und wendet das Ergebnis der Größenänderung nicht automatisch auf das zugehörige Element an.

Darstellung von Composables ändern

alpha

Mit dem Modifikator alpha wird die Deckkraft des Elements und seiner untergeordneten Elemente festgelegt. Dabei steht 0f für vollständig transparent und 1.0f für vollständig deckend.

scale

Mit dem Modifikator scale wird der Inhalt des Composables entlang der horizontalen, vertikalen und Tiefenachse skaliert.

Tests und Barrierefreiheit im Internet

semantics

Der Modifikator semantics fügt dem Layoutknoten Semantik hinzu, die für Tests und Bedienungshilfen verwendet werden kann. Weitere Informationen finden Sie unter Semantik in Jetpack Compose und SemanticsModifier.

testTag

Der Modifikator testTag ist eine Kurzschreibweise für SemanticsPropertyReceiver.testTag, mit der Test-Frameworks das Element in Tests finden können.