修饰符

用于 @expo/ui 组件的 Jetpack Compose 布局修饰符。

Android
Bundled version:
~55.0.2

Jetpack Compose 修饰符允许你自定义 UI 组件的布局、外观和行为。修饰符是 Compose 中的样式属性的等价物——它们控制大小、内边距、背景、交互等。

🌐 Jetpack Compose modifiers allow you to customize the layout, appearance, and behavior of UI components. Modifiers are the Compose equivalent of style properties — they control sizing, padding, backgrounds, interactions, and more.

安装

🌐 Installation

Terminal
npx expo install @expo/ui

If you are installing this in an existing React Native app, make sure to install expo in your project.

用法

🌐 Usage

修饰符通过使用带有数组语法的 modifiers 属性应用于组件。你可以组合多个修饰符来创建复杂的样式和行为。修饰符按它们在数组中出现的顺序应用,这可能会影响最终结果(例如,在 background 之前应用 padding 会产生与相反顺序不同的结果)。

🌐 Modifiers are applied to components using the modifiers prop with an array syntax. You can combine multiple modifiers to create complex styling and behavior. Modifiers are applied in the order they appear in the array, which can affect the final result (for example, applying padding before background produces different results than the reverse).

import { Button, Host } from '@expo/ui/jetpack-compose'; import { paddingAll, fillMaxWidth, background, border, shadow, clickable, } from '@expo/ui/jetpack-compose/modifiers'; function ModifiersExample() { return ( <Host style={{ flex: 1 }}> {/* Basic styling modifiers */} <Button modifiers={[paddingAll(16), fillMaxWidth(), background('#FF6B6B')]}> Full-width padded button </Button> {/* Complex combination with border and shadow */} <Button modifiers={[paddingAll(12), background('#4ECDC4'), border(2, '#2C3E50'), shadow(4)]}> Styled with border and shadow </Button> </Host> ); }

填充

🌐 Padding

控制组件内容周围的间距。

🌐 Control the spacing around a component's content.

paddingAll(all)

在四个边上应用相等的填充。

🌐 Applies equal padding on all four sides.

参数类型描述
allnumber以 dp 为单位的内边距值。
import { paddingAll } from '@expo/ui/jetpack-compose/modifiers'; <Button modifiers={[paddingAll(16)]}>Padded button</Button>;

padding(start, top, end, bottom)

对每一侧应用单独的填充。

🌐 Applies individual padding to each side.

参数类型描述
startnumber左/起始填充(dp)
topnumber顶部填充(dp)
endnumber右/结束填充(dp)
bottomnumber底部填充(dp)
import { padding } from '@expo/ui/jetpack-compose/modifiers'; <Button modifiers={[padding(16, 8, 16, 8)]}>Custom padding</Button>;

尺寸

🌐 Size

控制组件的尺寸。

🌐 Control the dimensions of a component.

size(width, height)

为组件设置精确尺寸。

🌐 Sets exact dimensions for the component.

参数类型描述
widthnumber宽度(dp)。
heightnumber高度(dp)。
import { size } from '@expo/ui/jetpack-compose/modifiers'; <Button modifiers={[size(200, 48)]}>Fixed size</Button>;

fillMaxSize(fraction?)

在两个维度上填充所有可用空间。

🌐 Fills all available space in both dimensions.

参数类型描述
fractionnumber可用空间的比例(0.0–1.0)。默认值 1.0
import { fillMaxSize } from '@expo/ui/jetpack-compose/modifiers'; <Button modifiers={[fillMaxSize()]}>Fill all space</Button> <Button modifiers={[fillMaxSize(0.5)]}>Fill half</Button>

fillMaxWidth(fraction?)

填充可用宽度。

🌐 Fills available width.

参数类型描述
fractionnumber可用宽度的分数(0.0–1.0)。默认值为 1.0
import { fillMaxWidth } from '@expo/ui/jetpack-compose/modifiers'; <Button modifiers={[fillMaxWidth()]}>Full width</Button>;

fillMaxHeight(fraction?)

填充可用高度。

🌐 Fills available height.

参数类型描述
fractionnumber可用高度的比例(0.0–1.0)。默认值 1.0

width(value)

设置一个精确的宽度。

🌐 Sets an exact width.

参数类型描述
valuenumber宽度(以 dp 为单位)。

height(value)

设置一个精确的高度。

🌐 Sets an exact height.

参数类型描述
valuenumber高度(以 dp 为单位)。

wrapContentWidth(alignment?)

调整组件的尺寸以适应其内容的宽度。

🌐 Sizes the component to wrap its content width.

参数类型描述
alignmentstring内容的水平对齐。

wrapContentHeight(alignment?)

调整组件的尺寸以适应其内容的高度。

🌐 Sizes the component to wrap its content height.

参数类型描述
alignmentstring内容的垂直对齐。

位置

🌐 Position

控制组件相对于其自然位置的位置。

🌐 Control the position of a component relative to its natural placement.

offset(x, y)

将组件从其自然位置偏移,而不影响周围组件的布局。

🌐 Offsets the component from its natural position without affecting the layout of surrounding components.

参数类型描述
xnumber水平偏移量(dp)。
ynumber垂直偏移量(dp)。
import { offset } from '@expo/ui/jetpack-compose/modifiers'; <Button modifiers={[offset(10, 5)]}>Offset button</Button>;

外观

🌐 Appearance

控制组件的视觉外观。

🌐 Control the visual appearance of a component.

background(color)

设置背景颜色。

🌐 Sets the background color.

参数类型描述
colorstring背景颜色(十六进制字符串)。
import { background } from '@expo/ui/jetpack-compose/modifiers'; <Button modifiers={[background('#3498DB')]}>Blue background</Button>;

border(borderWidth, borderColor)

在组件周围添加边框。

🌐 Adds a border around the component.

参数类型描述
borderWidthnumber边框宽度(dp)。
borderColorstring边框颜色(十六进制字符串)。
import { border } from '@expo/ui/jetpack-compose/modifiers'; <Button modifiers={[border(2, '#E74C3C')]}>Bordered button</Button>;

shadow(elevation)

在组件下方添加一个高度阴影。

🌐 Adds an elevation shadow beneath the component.

参数类型描述
elevationnumber阴影高度(dp)。
import { shadow } from '@expo/ui/jetpack-compose/modifiers'; <Button modifiers={[shadow(8)]}>Elevated button</Button>;

alpha(alpha)

控制组件的不透明度。

🌐 Controls the opacity of the component.

参数类型描述
alphanumber不透明度值(0.0–1.0)。
import { alpha } from '@expo/ui/jetpack-compose/modifiers'; <Button modifiers={[alpha(0.5)]}>Semi-transparent</Button>;

blur(radius)

对组件应用模糊效果。

🌐 Applies a blur effect to the component.

参数类型描述
radiusnumber模糊半径(dp 单位)。
import { blur } from '@expo/ui/jetpack-compose/modifiers'; <Button modifiers={[blur(4)]}>Blurred button</Button>;

变形

🌐 Transform

对组件应用视觉变换。

🌐 Apply visual transformations to a component.

rotate(degrees)

旋转组件。

🌐 Rotates the component.

参数类型描述
degreesnumber旋转角度(以度为单位)。
import { rotate } from '@expo/ui/jetpack-compose/modifiers'; <Button modifiers={[rotate(45)]}>Rotated</Button>;

zIndex(index)

控制重叠组件的绘制顺序。

🌐 Controls the drawing order of overlapping components.

参数类型描述
indexnumber层索引。
import { zIndex } from '@expo/ui/jetpack-compose/modifiers'; <Button modifiers={[zIndex(10)]}>On top</Button>;

动画

🌐 Animation

在组件内为布局更改添加动画。

🌐 Animate layout changes within a component.

animateContentSize(dampingRatio?, stiffness?)

使用弹簧动画为组件内容的大小变化添加动画效果。

🌐 Animates size changes of the component's content using a spring animation.

参数类型描述
dampingRationumber弹簧阻尼比。控制弹跳性。
stiffnessnumber弹簧刚度。控制动画速度。
import { animateContentSize } from '@expo/ui/jetpack-compose/modifiers'; <Button modifiers={[animateContentSize()]}>Animated size</Button> <Button modifiers={[animateContentSize(0.5, 200)]}>Custom spring</Button>

布局

🌐 Layout

控制组件在其父容器中的大小和位置。

🌐 Control how a component is sized and positioned within its parent container.

weight(weight)

RowColumn 内的组件分配灵活的权重,在加权子组件之间按比例分配可用空间。

🌐 Assigns a flexible weight to a component inside a Row or Column, distributing available space proportionally among weighted children.

参数类型描述
weightnumber权重系数。
import { weight } from '@expo/ui/jetpack-compose/modifiers'; // In a Row, the first button takes 2/3 and the second takes 1/3 <Button modifiers={[weight(2)]}>Wider</Button> <Button modifiers={[weight(1)]}>Narrower</Button>

align(alignment)

设置组件在其父容器中的对齐方式。

🌐 Sets the alignment of the component within its parent container.

参数类型描述
alignmentstring容器内的对齐方式。

matchParentSize()

将组件的大小调整为与其父组件 Box 的大小相匹配。与 fillMaxSize 不同,这不会影响父组件的测量。

🌐 Sizes the component to match the size of its parent Box. Unlike fillMaxSize, this does not affect the parent's measurement.

import { matchParentSize } from '@expo/ui/jetpack-compose/modifiers'; <Button modifiers={[matchParentSize()]}>Match parent</Button>;

互动

🌐 Interaction

为组件添加用户交互处理程序。

🌐 Add user interaction handlers to a component.

clickable(handler)

使组件响应点击事件。

🌐 Makes the component respond to click events.

参数类型描述
handler() => void点击时调用的回调函数。
import { clickable } from '@expo/ui/jetpack-compose/modifiers'; <Button modifiers={[clickable(() => console.log('Clicked!'))]}>Clickable</Button>;

selectable(selected, handler)

使组件可选择,类似于单选按钮。

🌐 Makes the component selectable, similar to a radio button.

参数类型描述
selectedboolean组件当前是否被选中。
handler() => void当选择状态变化时调用的回调。
import { selectable } from '@expo/ui/jetpack-compose/modifiers'; <Button modifiers={[selectable(isSelected, () => setIsSelected(!isSelected))]}> Selectable option </Button>;

剪辑

🌐 Clipping

将组件的内容裁剪为特定形状。

🌐 Clip a component's content to a specific shape.

clip(shape)

将组件裁剪到给定形状。形状边界外的内容不会被绘制。

🌐 Clips the component to the given shape. Content outside the shape boundary is not drawn.

参数类型描述
shapeShape要裁剪的形状。

可用形状

🌐 Available shapes

ShapeDescription
Shapes.RectangleA rectangle with no rounded corners.
Shapes.CircleA perfect circle.
Shapes.RoundedCorner(radius)A rectangle with uniform rounded corners. Pass a number for equal radius or an object { topStart, topEnd, bottomStart, bottomEnd } for individual corner radii.
Shapes.CutCorner(radius)A rectangle with cut (chamfered) corners. Accepts the same radius options as RoundedCorner.
Shapes.Material.Cookie4SidedMaterial Design cookie shape with 4 sides.
Shapes.Material.Cookie6SidedMaterial Design cookie shape with 6 sides.
import { clip } from '@expo/ui/jetpack-compose/modifiers'; import { Shapes } from '@expo/ui/jetpack-compose/modifiers'; // Circular clipping <Button modifiers={[clip(Shapes.Circle)]}>Circle</Button> // Rounded corners with uniform radius <Button modifiers={[clip(Shapes.RoundedCorner(12))]}>Rounded</Button> // Rounded corners with individual radii <Button modifiers={[ clip(Shapes.RoundedCorner({ topStart: 16, topEnd: 16, bottomStart: 0, bottomEnd: 0 })), ]}> Top rounded only </Button> // Cut corners <Button modifiers={[clip(Shapes.CutCorner(8))]}>Cut corners</Button>

实用工具

🌐 Utility

testID(tag)

为组件分配一个测试标识符,以便在 UI 测试中使用。

🌐 Assigns a test identifier to the component for use in UI testing.

参数类型描述
tagstring测试 ID。
import { testID } from '@expo/ui/jetpack-compose/modifiers'; <Button modifiers={[testID('submit-button')]}>Submit</Button>;

应用接口

🌐 API

import { paddingAll, padding, size, fillMaxWidth, background, clickable, clip, Shapes } from '@expo/ui/jetpack-compose/modifiers';

Constants

Shapes

Android

Type: { Circle: BuiltinShape, CutCorner: (params: number | CornerRadii) => BuiltinShape, Material: { Arch: BuiltinShape, Boom: BuiltinShape, Bun: BuiltinShape, Clover4Leaf: BuiltinShape, Clover8Leaf: BuiltinShape, Cookie12Sided: BuiltinShape, Cookie4Sided: BuiltinShape, Cookie6Sided: BuiltinShape, Cookie7Sided: BuiltinShape, Cookie9Sided: BuiltinShape, Diamond: BuiltinShape, Fan: BuiltinShape, Ghostish: BuiltinShape, Heart: BuiltinShape, Oval: BuiltinShape, Pentagon: BuiltinShape, Pill: BuiltinShape, PixelCircle: BuiltinShape, PixelTriangle: BuiltinShape, Puffy: BuiltinShape, PuffyDiamond: BuiltinShape, Slanted: BuiltinShape, SoftBurst: BuiltinShape, Sunny: BuiltinShape, Triangle: BuiltinShape, VerySunny: BuiltinShape }, Rectangle: BuiltinShape, RoundedCorner: (params: number | CornerRadii) => BuiltinShape }

Predefined shapes for use with the clip modifier.

Example

clip(Shapes.Circle) clip(Shapes.RoundedCorner(16)) clip(Shapes.RoundedCorner({ topStart: 8, bottomEnd: 16 })) clip(Shapes.Material.Heart)

Methods

align(alignment)

Android
ParameterType
alignmentAlignment

Aligns the view within its container.

Returns:
ModifierConfig

alpha(alpha)

Android
ParameterTypeDescription
alphanumber

Opacity value (0.0 to 1.0).


Sets the opacity/alpha of the view.

Returns:
ModifierConfig

animateContentSize(dampingRatio, stiffness)

Android
ParameterTypeDescription
dampingRatio(optional)number

Spring damping ratio. Default is DampingRatioNoBouncy.

stiffness(optional)number

Spring stiffness. Default is StiffnessMedium.


Animates size changes with spring animation.

Returns:
ModifierConfig

animated(targetValue, spec)

Android
ParameterType
targetValuenumber
spec(optional)AnimationSpec

Returns:
{ $animated: true, animationSpec: AnimationSpec, targetValue: number }

background(color)

Android
ParameterTypeDescription
colorColorValue

Color string (hex, e.g., '#FF0000').


Sets the background color.

Returns:
ModifierConfig

blur(radius)

Android
ParameterTypeDescription
radiusnumber

Blur radius in dp.


Applies a blur effect.

Returns:
ModifierConfig

border(borderWidth, borderColor)

Android
ParameterTypeDescription
borderWidthnumber

Border width in dp.

borderColorColorValue

Border color string (hex).


Adds a border around the view.

Returns:
ModifierConfig

clickable(handler, options)

Android
ParameterTypeDescription
handler() => void

Function to call when clicked.

options(optional){ indication: boolean }

Optional configuration.


Makes the view clickable.

Returns:
ModifierConfig

clip(shape)

Android
ParameterTypeDescription
shapeBuiltinShape

A shape from Shapes, e.g. Shapes.Circle or Shapes.Material.Heart.


Clips the view to a built-in Jetpack Compose shape.

Returns:
ModifierConfig

fillMaxHeight(fraction)

Android
ParameterTypeDescription
fraction(optional)number

Fraction of max height (0.0 to 1.0). Default is 1.0.


Fills the maximum available height.

Returns:
ModifierConfig

fillMaxSize(fraction)

Android
ParameterTypeDescription
fraction(optional)number

Fraction of max size (0.0 to 1.0). Default is 1.0.


Fills the maximum available size.

Returns:
ModifierConfig

fillMaxWidth(fraction)

Android
ParameterTypeDescription
fraction(optional)number

Fraction of max width (0.0 to 1.0). Default is 1.0.


Fills the maximum available width.

Returns:
ModifierConfig

graphicsLayer(params)

Android
ParameterTypeDescription
params{ alpha: number | { $animated: true, animationSpec: AnimationSpec, targetValue: number }, ambientShadowColor: ColorValue, cameraDistance: number, clip: boolean, compositingStrategy: 'auto' | 'offscreen' | 'modulate', rotationX: number | { $animated: true, animationSpec: AnimationSpec, targetValue: number }, rotationY: number | { $animated: true, animationSpec: AnimationSpec, targetValue: number }, rotationZ: number | { $animated: true, animationSpec: AnimationSpec, targetValue: number }, scaleX: number | { $animated: true, animationSpec: AnimationSpec, targetValue: number }, scaleY: number | { $animated: true, animationSpec: AnimationSpec, targetValue: number }, shadowElevation: number | { $animated: true, animationSpec: AnimationSpec, targetValue: number }, shape: BuiltinShape, spotShadowColor: ColorValue, transformOriginX: number, transformOriginY: number, translationX: number | { $animated: true, animationSpec: AnimationSpec, targetValue: number }, translationY: number | { $animated: true, animationSpec: AnimationSpec, targetValue: number } }

Transform and visual effect parameters.


Applies a graphics layer transformation with animation support.

Returns:
ModifierConfig

height(value)

Android
ParameterTypeDescription
valuenumber

Height in dp.


Sets the exact height of the view.

Returns:
ModifierConfig

imePadding()

Android

Adds padding to avoid the software keyboard (IME). When the keyboard is visible, padding is added to keep content above it.

Returns:
ModifierConfig

keyframes(params)

Android
ParameterType
params{ delayMillis: number, durationMillis: number, keyframes: Record<number, number> }

Returns:
{ $type: 'keyframes', delayMillis: number, durationMillis: number, keyframes: Record<number, number> }

matchParentSize()

Android

Makes the view match the parent Box size. Only works when used inside Box.

Returns:
ModifierConfig

offset(x, y)

Android
ParameterTypeDescription
xnumber

Horizontal offset in dp.

ynumber

Vertical offset in dp.


Offsets the view from its natural position.

Returns:
ModifierConfig

padding(start, top, end, bottom)

Android
ParameterTypeDescription
startnumber

Left padding in dp (or right in RTL).

topnumber

Top padding in dp.

endnumber

Right padding in dp (or left in RTL).

bottomnumber

Bottom padding in dp.


Applies padding with individual values for each side.

Returns:
ModifierConfig

paddingAll(all)

Android
ParameterTypeDescription
allnumber

Padding value in dp.


Applies equal padding on all sides.

Returns:
ModifierConfig

rotate(degrees)

Android
ParameterTypeDescription
degreesnumber

Rotation angle in degrees.


Rotates the view.

Returns:
ModifierConfig

selectable(selected, handler)

Android
ParameterTypeDescription
selectedboolean

Whether the item is currently selected.

handler() => void

Function to call when the item is clicked.


Makes the view selectable, like a radio button row.

Returns:
ModifierConfig

shadow(elevation)

Android
ParameterTypeDescription
elevationnumber

Shadow elevation in dp.


Adds a shadow/elevation effect.

Returns:
ModifierConfig

size(width, height)

Android
ParameterTypeDescription
widthnumber

Width in dp.

heightnumber

Height in dp.


Sets exact width and height.

Returns:
ModifierConfig

snap(params)

Android
ParameterType
params(optional){ delayMillis: number }

Returns:
{ $type: 'snap', delayMillis: number }

spring(params)

Android
ParameterType
params(optional){ dampingRatio: number, stiffness: number, visibilityThreshold: number }

Returns:
{ $type: 'spring', dampingRatio: number, stiffness: number, visibilityThreshold: number }

testID(tag)

Android
ParameterTypeDescription
tagstring

Test ID string.


Sets the test ID for testing frameworks.

Returns:
ModifierConfig

tween(params)

Android
ParameterType
params(optional){ delayMillis: number, durationMillis: number, easing: 'linear' | 'fastOutSlowIn' | 'fastOutLinearIn' | 'linearOutSlowIn' | 'ease' }

Returns:
{ $type: 'tween', delayMillis: number, durationMillis: number, easing: 'linear' | 'fastOutSlowIn' | 'fastOutLinearIn' | 'linearOutSlowIn' | 'ease' }

weight(weight)

Android
ParameterTypeDescription
weightnumber

Weight value (relative to siblings).


Sets the weight for flexible sizing in Row or Column. Only works when used inside Row or Column.

Returns:
ModifierConfig

width(value)

Android
ParameterTypeDescription
valuenumber

Width in dp.


Sets the exact width of the view.

Returns:
ModifierConfig

wrapContentHeight(alignment)

Android
ParameterTypeDescription
alignment(optional)'top' | 'bottom' | 'centerVertically'

Optional vertical alignment ('top', 'centerVertically', 'bottom').


Wraps the height to the content size.

Returns:
ModifierConfig

wrapContentWidth(alignment)

Android
ParameterTypeDescription
alignment(optional)'start' | 'end' | 'centerHorizontally'

Optional horizontal alignment ('start', 'centerHorizontally', 'end').


Wraps the width to the content size.

Returns:
ModifierConfig

zIndex(index)

Android
ParameterTypeDescription
indexnumber

Z-index value.


Sets the z-index for layering.

Returns:
ModifierConfig

Types

Alignment

Android

Literal Type: string

Acceptable values are: 'topStart' | 'topCenter' | 'topEnd' | 'centerStart' | 'center' | 'centerEnd' | 'bottomStart' | 'bottomCenter' | 'bottomEnd' | 'top' | 'centerVertically' | 'bottom' | 'start' | 'centerHorizontally' | 'end'

AnimatedValue

Android

Type: ReturnType<animated>

AnimationSpec

Android

Type: ReturnType<spring | tween | snap | keyframes>

BuiltinShape

Android

Built-in Jetpack Compose shape for the clip modifier.

Type: object shaped as below:

PropertyTypeDescription
type'rectangle'
-

Or object shaped as below:

PropertyTypeDescription
type'circle'
-

Or object shaped as below:

PropertyTypeDescription
bottomEnd(optional)number
-
bottomStart(optional)number
-
radius(optional)number
-
topEnd(optional)number
-
topStart(optional)number
-
type'roundedCorner'
-

Or object shaped as below:

PropertyTypeDescription
bottomEnd(optional)number
-
bottomStart(optional)number
-
radius(optional)number
-
topEnd(optional)number
-
topStart(optional)number
-
type'cutCorner'
-

Or object shaped as below:

PropertyTypeDescription
nameMaterialShapeName
-
type'material'
-

Deprecated: Use ModifierConfig instead. ExpoModifier (SharedRef pattern) has been replaced with JSON Config pattern for better DX and platform consistency.

ExpoModifier

Android

Type: ModifierConfig