androidx.compose.ui
Interfaces
Alignment |
An interface to calculate the position of a sized box inside an available space. |
Cmn
|
Alignment.Horizontal |
An interface to calculate the position of box of a certain width inside an available width. |
Cmn
|
Alignment.Vertical |
An interface to calculate the position of a box of a certain height inside an available height. |
Cmn
|
Modifier |
An ordered, immutable collection of |
Cmn
|
Modifier.Element |
A single element contained within a |
Cmn
|
MotionDurationScale |
Provides a duration scale for motion such as animations. |
Cmn
|
Classes
BiasAbsoluteAlignment |
An |
Cmn
|
BiasAbsoluteAlignment.Horizontal |
An |
Cmn
|
BiasAlignment |
An |
Cmn
|
BiasAlignment.Horizontal |
An |
Cmn
|
BiasAlignment.Vertical |
An |
Cmn
|
CombinedModifier |
A node in a |
Cmn
|
FrameRateCategory |
A type-safe representation of a frame rate category for a display or application. |
Cmn
|
Modifier.Node |
The longer-lived object that is created for each |
Cmn
|
Objects
AbsoluteAlignment |
A collection of common |
Cmn
|
ComposeUiFlags |
This is a collection of flags which are used to guard against regressions in some of the "riskier" refactors or new feature support that is added to this module. |
Cmn
|
Modifier.Companion |
The companion object |
Cmn
|
MotionDurationScale.Key |
Cmn
|
Annotations
ExperimentalComposeUiApi |
Cmn
|
|
ExperimentalIndirectPointerApi |
Cmn
|
|
InternalComposeUiApi |
Unstable API for use only between |
Cmn
|
UiComposable |
An annotation that can be used to mark a composable function as being expected to be use in a composable function that is also marked or inferred to be marked as a |
Cmn
|
Extension functions summary
Modifier |
Modifier.composed(Declare a just-in-time composition of a |
Cmn
|
Modifier |
Modifier.composed(Declare a just-in-time composition of a |
Cmn
|
Modifier |
Modifier.composed(Declare a just-in-time composition of a |
Cmn
|
Modifier |
Modifier.composed(Declare a just-in-time composition of a |
Cmn
|
Modifier |
Modifier.composed(Declare a just-in-time composition of a |
Cmn
|
Modifier |
A modifier that keeps the device screen on as long as it is part of the composition on supported platforms. |
Cmn
|
Modifier |
Composer.materialize(modifier: Modifier)Materialize any instance-specific |
Cmn
|
Modifier |
Modifier.preferredFrameRate(frameRateCategory: FrameRateCategory)Set a requested frame rate on Composable |
Cmn
|
Modifier |
Modifier.preferredFrameRate(Set a requested frame rate on Composable |
Cmn
|
Modifier |
Modifier.sensitiveContent(isContentSensitive: Boolean)This modifier hints that the composable renders sensitive content (i.e. username, password, credit card etc) on the screen, and the content should be protected during screen share in supported environments. |
Cmn
|
Modifier |
Creates a modifier that controls the drawing order for the children of the same layout parent. |
Cmn
|
Extension functions
composed
fun Modifier.composed(
inspectorInfo: InspectorInfo.() -> Unit = NoInspectorInfo,
factory: @Composable Modifier.() -> Modifier
): Modifier
Declare a just-in-time composition of a Modifier that will be composed for each element it modifies. composed may be used to implement stateful modifiers that have instance-specific state for each modified element, allowing the same Modifier instance to be safely reused for multiple elements while maintaining element-specific state.
If inspectorInfo is specified this modifier will be visible to tools during development. Specify the name and arguments of the original modifier.
Example usage:
import androidx.compose.ui.Modifier import androidx.compose.ui.composed import androidx.compose.ui.graphics.Color import androidx.compose.ui.platform.debugInspectorInfo // let's create your own custom stateful modifier fun Modifier.myColorModifier(color: Color) = composed( // pass inspector information for debug inspectorInfo = debugInspectorInfo { // name should match the name of the modifier name = "myColorModifier" // specify a single argument as the value when the argument name is irrelevant value = color }, // pass your modifier implementation that resolved per modified element factory = { // add your modifier implementation here Modifier }, )
import androidx.compose.ui.Modifier import androidx.compose.ui.composed import androidx.compose.ui.graphics.Color import androidx.compose.ui.platform.debugInspectorInfo import androidx.compose.ui.unit.Dp // let's create your own custom stateful modifier with multiple arguments fun Modifier.myModifier(width: Dp, height: Dp, color: Color) = composed( // pass inspector information for debug inspectorInfo = debugInspectorInfo { // name should match the name of the modifier name = "myModifier" // add name and value of each argument properties["width"] = width properties["height"] = height properties["color"] = color }, // pass your modifier implementation that resolved per modified element factory = { // add your modifier implementation here Modifier }, )
materialize must be called to create instance-specific modifiers if you are directly applying a Modifier to an element tree node.
composed
fun Modifier.composed(
fullyQualifiedName: String,
key1: Any?,
inspectorInfo: InspectorInfo.() -> Unit = NoInspectorInfo,
factory: @Composable Modifier.() -> Modifier
): Modifier
Declare a just-in-time composition of a Modifier that will be composed for each element it modifies. composed may be used to implement stateful modifiers that have instance-specific state for each modified element, allowing the same Modifier instance to be safely reused for multiple elements while maintaining element-specific state.
When keys are provided, composed produces a Modifier that will compare equals to another modifier constructed with the same keys in order to take advantage of caching and skipping optimizations. fullyQualifiedName should be the fully-qualified import name for your modifier factory function, e.g. com.example.myapp.ui.fancyPadding.
If inspectorInfo is specified this modifier will be visible to tools during development. Specify the name and arguments of the original modifier.
Example usage:
import androidx.compose.ui.Modifier import androidx.compose.ui.composed import androidx.compose.ui.graphics.Color import androidx.compose.ui.platform.debugInspectorInfo // let's create your own custom stateful modifier fun Modifier.myColorModifier(color: Color) = composed( // pass inspector information for debug inspectorInfo = debugInspectorInfo { // name should match the name of the modifier name = "myColorModifier" // specify a single argument as the value when the argument name is irrelevant value = color }, // pass your modifier implementation that resolved per modified element factory = { // add your modifier implementation here Modifier }, )
import androidx.compose.ui.Modifier import androidx.compose.ui.composed import androidx.compose.ui.graphics.Color import androidx.compose.ui.platform.debugInspectorInfo import androidx.compose.ui.unit.Dp // let's create your own custom stateful modifier with multiple arguments fun Modifier.myModifier(width: Dp, height: Dp, color: Color) = composed( // pass inspector information for debug inspectorInfo = debugInspectorInfo { // name should match the name of the modifier name = "myModifier" // add name and value of each argument properties["width"] = width properties["height"] = height properties["color"] = color }, // pass your modifier implementation that resolved per modified element factory = { // add your modifier implementation here Modifier }, )
materialize must be called to create instance-specific modifiers if you are directly applying a Modifier to an element tree node.
composed
fun Modifier.composed(
fullyQualifiedName: String,
vararg keys: Any?,
inspectorInfo: InspectorInfo.() -> Unit = NoInspectorInfo,
factory: @Composable Modifier.() -> Modifier
): Modifier
Declare a just-in-time composition of a Modifier that will be composed for each element it modifies. composed may be used to implement stateful modifiers that have instance-specific state for each modified element, allowing the same Modifier instance to be safely reused for multiple elements while maintaining element-specific state.
When keys are provided, composed produces a Modifier that will compare equals to another modifier constructed with the same keys in order to take advantage of caching and skipping optimizations. fullyQualifiedName should be the fully-qualified import name for your modifier factory function, e.g. com.example.myapp.ui.fancyPadding.
If inspectorInfo is specified this modifier will be visible to tools during development. Specify the name and arguments of the original modifier.
Example usage:
import androidx.compose.ui.Modifier import androidx.compose.ui.composed import androidx.compose.ui.graphics.Color import androidx.compose.ui.platform.debugInspectorInfo // let's create your own custom stateful modifier fun Modifier.myColorModifier(color: Color) = composed( // pass inspector information for debug inspectorInfo = debugInspectorInfo { // name should match the name of the modifier name = "myColorModifier" // specify a single argument as the value when the argument name is irrelevant value = color }, // pass your modifier implementation that resolved per modified element factory = { // add your modifier implementation here Modifier }, )
import androidx.compose.ui.Modifier import androidx.compose.ui.composed import androidx.compose.ui.graphics.Color import androidx.compose.ui.platform.debugInspectorInfo import androidx.compose.ui.unit.Dp // let's create your own custom stateful modifier with multiple arguments fun Modifier.myModifier(width: Dp, height: Dp, color: Color) = composed( // pass inspector information for debug inspectorInfo = debugInspectorInfo { // name should match the name of the modifier name = "myModifier" // add name and value of each argument properties["width"] = width properties["height"] = height properties["color"] = color }, // pass your modifier implementation that resolved per modified element factory = { // add your modifier implementation here Modifier }, )
materialize must be called to create instance-specific modifiers if you are directly applying a Modifier to an element tree node.
composed
fun Modifier.composed(
fullyQualifiedName: String,
key1: Any?,
key2: Any?,
inspectorInfo: InspectorInfo.() -> Unit = NoInspectorInfo,
factory: @Composable Modifier.() -> Modifier
): Modifier
Declare a just-in-time composition of a Modifier that will be composed for each element it modifies. composed may be used to implement stateful modifiers that have instance-specific state for each modified element, allowing the same Modifier instance to be safely reused for multiple elements while maintaining element-specific state.
When keys are provided, composed produces a Modifier that will compare equals to another modifier constructed with the same keys in order to take advantage of caching and skipping optimizations. fullyQualifiedName should be the fully-qualified import name for your modifier factory function, e.g. com.example.myapp.ui.fancyPadding.
If inspectorInfo is specified this modifier will be visible to tools during development. Specify the name and arguments of the original modifier.
Example usage:
import androidx.compose.ui.Modifier import androidx.compose.ui.composed import androidx.compose.ui.graphics.Color import androidx.compose.ui.platform.debugInspectorInfo // let's create your own custom stateful modifier fun Modifier.myColorModifier(color: Color) = composed( // pass inspector information for debug inspectorInfo = debugInspectorInfo { // name should match the name of the modifier name = "myColorModifier" // specify a single argument as the value when the argument name is irrelevant value = color }, // pass your modifier implementation that resolved per modified element factory = { // add your modifier implementation here Modifier }, )
import androidx.compose.ui.Modifier import androidx.compose.ui.composed import androidx.compose.ui.graphics.Color import androidx.compose.ui.platform.debugInspectorInfo import androidx.compose.ui.unit.Dp // let's create your own custom stateful modifier with multiple arguments fun Modifier.myModifier(width: Dp, height: Dp, color: Color) = composed( // pass inspector information for debug inspectorInfo = debugInspectorInfo { // name should match the name of the modifier name = "myModifier" // add name and value of each argument properties["width"] = width properties["height"] = height properties["color"] = color }, // pass your modifier implementation that resolved per modified element factory = { // add your modifier implementation here Modifier }, )
materialize must be called to create instance-specific modifiers if you are directly applying a Modifier to an element tree node.
composed
fun Modifier.composed(
fullyQualifiedName: String,
key1: Any?,
key2: Any?,
key3: Any?,
inspectorInfo: InspectorInfo.() -> Unit = NoInspectorInfo,
factory: @Composable Modifier.() -> Modifier
): Modifier
Declare a just-in-time composition of a Modifier that will be composed for each element it modifies. composed may be used to implement stateful modifiers that have instance-specific state for each modified element, allowing the same Modifier instance to be safely reused for multiple elements while maintaining element-specific state.
When keys are provided, composed produces a Modifier that will compare equals to another modifier constructed with the same keys in order to take advantage of caching and skipping optimizations. fullyQualifiedName should be the fully-qualified import name for your modifier factory function, e.g. com.example.myapp.ui.fancyPadding.
If inspectorInfo is specified this modifier will be visible to tools during development. Specify the name and arguments of the original modifier.
Example usage:
import androidx.compose.ui.Modifier import androidx.compose.ui.composed import androidx.compose.ui.graphics.Color import androidx.compose.ui.platform.debugInspectorInfo // let's create your own custom stateful modifier fun Modifier.myColorModifier(color: Color) = composed( // pass inspector information for debug inspectorInfo = debugInspectorInfo { // name should match the name of the modifier name = "myColorModifier" // specify a single argument as the value when the argument name is irrelevant value = color }, // pass your modifier implementation that resolved per modified element factory = { // add your modifier implementation here Modifier }, )
import androidx.compose.ui.Modifier import androidx.compose.ui.composed import androidx.compose.ui.graphics.Color import androidx.compose.ui.platform.debugInspectorInfo import androidx.compose.ui.unit.Dp // let's create your own custom stateful modifier with multiple arguments fun Modifier.myModifier(width: Dp, height: Dp, color: Color) = composed( // pass inspector information for debug inspectorInfo = debugInspectorInfo { // name should match the name of the modifier name = "myModifier" // add name and value of each argument properties["width"] = width properties["height"] = height properties["color"] = color }, // pass your modifier implementation that resolved per modified element factory = { // add your modifier implementation here Modifier }, )
materialize must be called to create instance-specific modifiers if you are directly applying a Modifier to an element tree node.
keepScreenOn
fun Modifier.keepScreenOn(): Modifier
A modifier that keeps the device screen on as long as it is part of the composition on supported platforms.
This is useful for scenarios where the user might not be interacting with the screen frequently but the content needs to remain visible, such as during video playback.
materialize
fun Composer.materialize(modifier: Modifier): Modifier
Materialize any instance-specific composed modifiers for applying to a raw tree node. Call right before setting the returned modifier on an emitted node. You almost certainly do not need to call this function directly.
preferredFrameRate
fun Modifier.preferredFrameRate(frameRateCategory: FrameRateCategory): Modifier
Set a requested frame rate on Composable
You can set the preferred frame rate (frames per second) for a Composable using a frame rate category see: FrameRateCategory.
For increased frame rates, please consider using FrameRateCategory.High.
Keep in mind that the preferred frame rate affects the frame rate for the next frame, so use this method carefully. It's important to note that the preference is valid as long as the Composable is drawn.
import androidx.compose.animation.core.animateFloatAsState import androidx.compose.animation.core.tween import androidx.compose.foundation.background import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.size import androidx.compose.material.Button import androidx.compose.material.LocalContentColor import androidx.compose.material.Text import androidx.compose.runtime.DisposableEffect import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableFloatStateOf import androidx.compose.runtime.remember import androidx.compose.ui.FrameRateCategory import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.testTag import androidx.compose.ui.preferredFrameRate import androidx.compose.ui.unit.dp var targetAlpha by remember { mutableFloatStateOf(1f) } val context = LocalContext.current val activity: Activity? = findOwner(context) DisposableEffect(activity) { activity?.window?.frameRateBoostOnTouchEnabled = false onDispose { activity?.window?.frameRateBoostOnTouchEnabled = true } } val alpha by animateFloatAsState(targetValue = targetAlpha, animationSpec = tween(durationMillis = 5000)) Column(modifier = Modifier.size(300.dp)) { Button( onClick = { targetAlpha = if (targetAlpha == 1f) 0.2f else 1f }, modifier = Modifier.testTag("frameRateTag") .background(LocalContentColor.current.copy(alpha = alpha)), ) { Text( text = "Click Me for alpha change with frame rate category High", color = LocalContentColor.current.copy(alpha = alpha), modifier = Modifier.preferredFrameRate(FrameRateCategory.High), ) } }
| Parameters | |
|---|---|
frameRateCategory: FrameRateCategory |
The preferred frame rate category the content should be rendered at. |
| See also | |
|---|---|
graphicsLayer |
preferredFrameRate
fun Modifier.preferredFrameRate(
frameRate: @FloatRange(from = 0.0, to = 360.0) Float
): Modifier
Set a requested frame rate on Composable
You can set the preferred frame rate (frames per second) for a Composable using a non-negative number. This API should only be used when a specific frame rate is needed for your Composable. For example, 24 or 30 for video play.
If multiple frame rates are requested, they will be aggregated to determine a feasible frame rate.
If you no longer want this modifier to influence the frame rate, clear the preference by setting it to 0.
Keep in mind that the preferred frame rate affects the frame rate for the next frame, so use this method carefully. It's important to note that the preference is valid as long as the Composable is drawn.
import androidx.compose.animation.core.animateFloatAsState import androidx.compose.animation.core.tween import androidx.compose.foundation.background import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.size import androidx.compose.material.Button import androidx.compose.material.LocalContentColor import androidx.compose.material.Text import androidx.compose.runtime.DisposableEffect import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableFloatStateOf import androidx.compose.runtime.remember import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.testTag import androidx.compose.ui.preferredFrameRate import androidx.compose.ui.unit.dp var targetAlpha by remember { mutableFloatStateOf(1f) } val context = LocalContext.current val activity: Activity? = findOwner(context) DisposableEffect(activity) { activity?.window?.frameRateBoostOnTouchEnabled = false onDispose { activity?.window?.frameRateBoostOnTouchEnabled = true } } val alpha by animateFloatAsState(targetValue = targetAlpha, animationSpec = tween(durationMillis = 5000)) Column(modifier = Modifier.size(300.dp)) { Button( onClick = { targetAlpha = if (targetAlpha == 1f) 0.2f else 1f }, modifier = Modifier.testTag("frameRateTag") .background(LocalContentColor.current.copy(alpha = alpha)), ) { Text( text = "Click Me for alpha change with 30 Hz frame rate", color = LocalContentColor.current.copy(alpha = alpha), // Adjust text alpha modifier = Modifier.preferredFrameRate(30f), ) } }
| Parameters | |
|---|---|
frameRate: @FloatRange(from = 0.0, to = 360.0) Float |
The preferred frame rate the content should be rendered at. Default value is 0. |
| See also | |
|---|---|
graphicsLayer |
sensitiveContent
fun Modifier.sensitiveContent(isContentSensitive: Boolean = true): Modifier
This modifier hints that the composable renders sensitive content (i.e. username, password, credit card etc) on the screen, and the content should be protected during screen share in supported environments.
| Parameters | |
|---|---|
isContentSensitive: Boolean = true |
whether the content is sensitive or not. Defaults to true. |
zIndex
fun Modifier.zIndex(zIndex: Float): Modifier
Creates a modifier that controls the drawing order for the children of the same layout parent. A child with larger zIndex will be drawn on top of all the children with smaller zIndex. When children have the same zIndex the original order in which the parent placed the children is used.
Note that if there would be multiple zIndex modifiers applied for the same layout the sum of their values will be used as the final zIndex. If no zIndex were applied for the layout then the default zIndex is 0.
import androidx.compose.foundation.layout.Box import androidx.compose.material.Text import androidx.compose.ui.Modifier import androidx.compose.ui.zIndex Box { Text("Drawn second", Modifier.zIndex(1f)) Text("Drawn first") }