# ResizableComponent

Artifact: [androidx.xr.scenecore:scenecore](https://developer.android.com/jetpack/androidx/releases/xr-scenecore) [View Source](https://cs.android.com/search?q=file:androidx/xr/scenecore/ResizableComponent.kt+class:androidx.xr.scenecore.ResizableComponent) Added in [1.0.0](https://developer.android.com/jetpack/androidx/releases/xr-scenecore#1.0.0)

*** ** * ** ***


```
class ResizableComponent : Component
```

<br />

|---|---|---|
| [kotlin.Any](https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-any/index.html) |||
| ↳ | [androidx.xr.scenecore.Component](https://developer.android.com/reference/kotlin/androidx/xr/scenecore/Component) ||
|   | ↳ | [androidx.xr.scenecore.ResizableComponent](https://developer.android.com/reference/kotlin/androidx/xr/scenecore/ResizableComponent) |

*** ** * ** ***

This `https://developer.android.com/reference/kotlin/androidx/xr/scenecore/Component` can be attached to a single instance of an `https://developer.android.com/reference/kotlin/androidx/xr/scenecore/Entity`. When attached, this Component will enable the user to resize the Entity by selecting and dragging along the boundaries of a user-resize affordance. While resizing an overlay will appear indicating the proposed updated size.

This component cannot be attached to an `https://developer.android.com/reference/kotlin/androidx/xr/scenecore/AnchorSpace` or to the `https://developer.android.com/reference/kotlin/androidx/xr/scenecore/ActivitySpace`. Calling `https://developer.android.com/reference/kotlin/androidx/xr/scenecore/Entity#addComponent(androidx.xr.scenecore.Component)` to an Entity with these types will return false.

Note: This Component is currently unsupported on GltfModelEntity.

## Summary

| ### Public companion functions |
|---|---|
| `https://developer.android.com/reference/kotlin/androidx/xr/scenecore/ResizableComponent` | `https://developer.android.com/reference/kotlin/androidx/xr/scenecore/ResizableComponent#create(androidx.xr.runtime.Session,androidx.xr.runtime.math.FloatSize3d,androidx.xr.runtime.math.FloatSize3d,java.util.concurrent.Executor,java.util.function.Consumer)( session: https://developer.android.com/reference/kotlin/androidx/xr/runtime/Session, minimumSize: https://developer.android.com/reference/kotlin/androidx/xr/runtime/math/FloatSize3d, maximumSize: https://developer.android.com/reference/kotlin/androidx/xr/runtime/math/FloatSize3d, executor: https://developer.android.com/reference/java/util/concurrent/Executor.html, resizeEventListener: https://developer.android.com/reference/java/util/function/Consumer.html<https://developer.android.com/reference/kotlin/androidx/xr/scenecore/ResizeEvent> )` Public factory function for creating a ResizableComponent. |

| ### Public functions |
|---|---|
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` | `https://developer.android.com/reference/kotlin/androidx/xr/scenecore/ResizableComponent#addResizeEventListener(java.util.concurrent.Executor,java.util.function.Consumer)( executor: https://developer.android.com/reference/java/util/concurrent/Executor.html, resizeEventListener: https://developer.android.com/reference/java/util/function/Consumer.html<https://developer.android.com/reference/kotlin/androidx/xr/scenecore/ResizeEvent> )` Adds the listener to the set of listeners that are invoked through the resize operation, such as start, ongoing and end. |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` | `https://developer.android.com/reference/kotlin/androidx/xr/scenecore/ResizableComponent#removeResizeEventListener(java.util.function.Consumer)(resizeEventListener: https://developer.android.com/reference/java/util/function/Consumer.html<https://developer.android.com/reference/kotlin/androidx/xr/scenecore/ResizeEvent>)` Removes a listener from the set listening to resize events. |

| ### Protected functions |
|---|---|
| `open https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html` | `https://developer.android.com/reference/kotlin/androidx/xr/scenecore/ResizableComponent#onAttach(androidx.xr.scenecore.Entity)(entity: https://developer.android.com/reference/kotlin/androidx/xr/scenecore/Entity)` Called by the framework when this component is being added to an `https://developer.android.com/reference/kotlin/androidx/xr/scenecore/Entity`. |
| `open https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` | `https://developer.android.com/reference/kotlin/androidx/xr/scenecore/ResizableComponent#onDetach(androidx.xr.scenecore.Entity)(entity: https://developer.android.com/reference/kotlin/androidx/xr/scenecore/Entity)` Called by the framework when this component is being removed from an `https://developer.android.com/reference/kotlin/androidx/xr/scenecore/Entity`. |

| ### Public properties |
|---|---|
| `https://developer.android.com/reference/kotlin/androidx/xr/runtime/math/FloatSize3d` | `https://developer.android.com/reference/kotlin/androidx/xr/scenecore/ResizableComponent#affordanceSize()` The current size of the affordance for the `https://developer.android.com/reference/kotlin/androidx/xr/scenecore/Entity`, in meters. |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html` | `https://developer.android.com/reference/kotlin/androidx/xr/scenecore/ResizableComponent#isAlwaysShowOverlayEnabled()` Whether a resize overlay will be shown even if the entity is not being resized. |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html` | `https://developer.android.com/reference/kotlin/androidx/xr/scenecore/ResizableComponent#isAutoHideContentWhileResizingEnabled()` Whether the content of the `https://developer.android.com/reference/kotlin/androidx/xr/scenecore/Entity`, and all child Entities, will be automatically hidden while it is being resized. |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html` | `https://developer.android.com/reference/kotlin/androidx/xr/scenecore/ResizableComponent#isFixedAspectRatioEnabled()` Whether the aspect ratio is maintained during resizing. |
| `https://developer.android.com/reference/kotlin/androidx/xr/runtime/math/FloatSize3d` | `https://developer.android.com/reference/kotlin/androidx/xr/scenecore/ResizableComponent#maximumEntitySize()` An upper bound for the User's resize actions, in meters. |
| `https://developer.android.com/reference/kotlin/androidx/xr/runtime/math/FloatSize3d` | `https://developer.android.com/reference/kotlin/androidx/xr/scenecore/ResizableComponent#minimumEntitySize()` A lower bound for the User's resize actions, in meters. |

## Public companion functions

### create

Added in [1.0.0](https://developer.android.com/jetpack/androidx/releases/xr-scenecore#1.0.0)

```
fun create(
    session: Session,
    minimumSize: FloatSize3d = kMinimumSize,
    maximumSize: FloatSize3d = kMaximumSize,
    executor: Executor = HandlerExecutor.mainThreadExecutor,
    resizeEventListener: Consumer<ResizeEvent>
): ResizableComponent
```

Public factory function for creating a ResizableComponent.

This `https://developer.android.com/reference/kotlin/androidx/xr/scenecore/Component` can be attached to a single instance of an `https://developer.android.com/reference/kotlin/androidx/xr/scenecore/Entity`. When attached, this Component will enable the user to resize the Entity by dragging along the boundaries of a user-resize affordance.

This component cannot be attached to an `https://developer.android.com/reference/kotlin/androidx/xr/scenecore/AnchorSpace` or to the `https://developer.android.com/reference/kotlin/androidx/xr/scenecore/ActivitySpace`. Calling `https://developer.android.com/reference/kotlin/androidx/xr/scenecore/Entity#addComponent(androidx.xr.scenecore.Component)` to an Entity with these types will return false.

| Parameters |
|---|---|
| `session: https://developer.android.com/reference/kotlin/androidx/xr/runtime/Session` | The `https://developer.android.com/reference/kotlin/androidx/xr/runtime/Session` to create the ResizableComponent in. |
| `minimumSize: https://developer.android.com/reference/kotlin/androidx/xr/runtime/math/FloatSize3d = kMinimumSize` | A lower bound for the User's resize actions, in meters. This value is used to set constraints on how small the user can resize the bounding box of the entity down to. The size of the content inside that bounding box is fully controlled by the application. The default value is 0 meters. |
| `maximumSize: https://developer.android.com/reference/kotlin/androidx/xr/runtime/math/FloatSize3d = kMaximumSize` | An upper bound for the User's resize actions, in meters. This value is used to set constraints on how large the user can resize the bounding box of the entity up to. The size of the content inside that bounding box is fully controlled by the application. The default value is 10 meters. |
| `executor: https://developer.android.com/reference/java/util/concurrent/Executor.html = HandlerExecutor.mainThreadExecutor` | The Executor to run the listener on. By default, listener is invoked on the main thread. |
| `resizeEventListener: https://developer.android.com/reference/java/util/function/Consumer.html<https://developer.android.com/reference/kotlin/androidx/xr/scenecore/ResizeEvent>` | A resize event listener for the event. The application should set the size of a PanelEntity using `https://developer.android.com/reference/kotlin/androidx/xr/scenecore/PanelEntity#size()`. |

| Returns |
|---|---|
| `https://developer.android.com/reference/kotlin/androidx/xr/scenecore/ResizableComponent` | `https://developer.android.com/reference/kotlin/androidx/xr/scenecore/ResizableComponent` instance. |

## Public functions

### addResizeEventListener

Added in [1.0.0](https://developer.android.com/jetpack/androidx/releases/xr-scenecore#1.0.0)

```
fun addResizeEventListener(
    executor: Executor = HandlerExecutor.mainThreadExecutor,
    resizeEventListener: Consumer<ResizeEvent>
): Unit
```

Adds the listener to the set of listeners that are invoked through the resize operation, such as start, ongoing and end.

The listener is invoked on the provided `https://developer.android.com/reference/java/util/concurrent/Executor.html` if provided.

| Parameters |
|---|---|
| `executor: https://developer.android.com/reference/java/util/concurrent/Executor.html = HandlerExecutor.mainThreadExecutor` | The Executor to run the listener on. By default, listener is invoked on the main thread. |
| `resizeEventListener: https://developer.android.com/reference/java/util/function/Consumer.html<https://developer.android.com/reference/kotlin/androidx/xr/scenecore/ResizeEvent>` | The listener to be invoked when a resize event occurs. |

### removeResizeEventListener

Added in [1.0.0](https://developer.android.com/jetpack/androidx/releases/xr-scenecore#1.0.0)

```
fun removeResizeEventListener(resizeEventListener: Consumer<ResizeEvent>): Unit
```

Removes a listener from the set listening to resize events.

| Parameters |
|---|---|
| `resizeEventListener: https://developer.android.com/reference/java/util/function/Consumer.html<https://developer.android.com/reference/kotlin/androidx/xr/scenecore/ResizeEvent>` | The listener to be removed. |

## Protected functions

### onAttach

```
protected open fun onAttach(entity: Entity): Boolean
```

Called by the framework when this component is being added to an `https://developer.android.com/reference/kotlin/androidx/xr/scenecore/Entity`.

This method is triggered when `https://developer.android.com/reference/kotlin/androidx/xr/scenecore/Entity#addComponent(androidx.xr.scenecore.Component)` is invoked. Implementations should override this method to perform setup logic or to validate if the component is compatible with the provided `https://developer.android.com/reference/kotlin/androidx/xr/scenecore/Component#onAttach(androidx.xr.scenecore.Entity)`.

| Parameters |
|---|---|
| `entity: https://developer.android.com/reference/kotlin/androidx/xr/scenecore/Entity` | The `https://developer.android.com/reference/kotlin/androidx/xr/scenecore/Entity` to which this component is being attached. |

| Returns |
|---|---|
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html` | `true` if the component was successfully attached; `false` if the `https://developer.android.com/reference/kotlin/androidx/xr/scenecore/Component#onAttach(androidx.xr.scenecore.Entity)` does not support this component or if attachment failed. |

### onDetach

```
protected open fun onDetach(entity: Entity): Unit
```

Called by the framework when this component is being removed from an `https://developer.android.com/reference/kotlin/androidx/xr/scenecore/Entity`.

This method is triggered when `https://developer.android.com/reference/kotlin/androidx/xr/scenecore/Entity#removeComponent(androidx.xr.scenecore.Component)` is invoked. Implementations should override this method to release resources or undo any changes made during `https://developer.android.com/reference/kotlin/androidx/xr/scenecore/Component#onAttach(androidx.xr.scenecore.Entity)`.

| Parameters |
|---|---|
| `entity: https://developer.android.com/reference/kotlin/androidx/xr/scenecore/Entity` | The `https://developer.android.com/reference/kotlin/androidx/xr/scenecore/Entity` from which this component is being detached. |

## Public properties

### affordanceSize

Added in [1.0.0](https://developer.android.com/jetpack/androidx/releases/xr-scenecore#1.0.0)

```
var affordanceSize: FloatSize3d
```

The current size of the affordance for the `https://developer.android.com/reference/kotlin/androidx/xr/scenecore/Entity`, in meters. This property is automatically updated after resize events to match the resize affordance to the newly suggested size of the content. The apps can still override it. The default value is set to 1 meter. If attached to a `https://developer.android.com/reference/kotlin/androidx/xr/scenecore/PanelEntity`, this is updated to the size of the Entity when attached.

### isAlwaysShowOverlayEnabled

Added in [1.0.0](https://developer.android.com/jetpack/androidx/releases/xr-scenecore#1.0.0)

```
var isAlwaysShowOverlayEnabled: Boolean
```

Whether a resize overlay will be shown even if the entity is not being resized.

This is useful for resizing multiple panels at once.

### isAutoHideContentWhileResizingEnabled

Added in [1.0.0](https://developer.android.com/jetpack/androidx/releases/xr-scenecore#1.0.0)

```
var isAutoHideContentWhileResizingEnabled: Boolean
```

Whether the content of the `https://developer.android.com/reference/kotlin/androidx/xr/scenecore/Entity`, and all child Entities, will be automatically hidden while it is being resized.

### isFixedAspectRatioEnabled

Added in [1.0.0](https://developer.android.com/jetpack/androidx/releases/xr-scenecore#1.0.0)

```
var isFixedAspectRatioEnabled: Boolean
```

Whether the aspect ratio is maintained during resizing.

If true the affordance will maintain its current aspect ratio being resized and all suggested sizes will maintain the current aspect ratio. This defaults to false.

### maximumEntitySize

Added in [1.0.0](https://developer.android.com/jetpack/androidx/releases/xr-scenecore#1.0.0)

```
var maximumEntitySize: FloatSize3d
```

An upper bound for the User's resize actions, in meters. This value constrains large the user can resize the bounding box of the `https://developer.android.com/reference/kotlin/androidx/xr/scenecore/Entity`. The size of the content inside that bounding box is fully controlled by the application.

### minimumEntitySize

Added in [1.0.0](https://developer.android.com/jetpack/androidx/releases/xr-scenecore#1.0.0)

```
var minimumEntitySize: FloatSize3d
```

A lower bound for the User's resize actions, in meters. This value constrains how small the user can resize the bounding box of the `https://developer.android.com/reference/kotlin/androidx/xr/scenecore/Entity`. The size of the content inside that bounding box is fully controlled by the application.