Reference version

修饰符

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

Android
Bundled version:
~55.0.0-beta.0

For the complete documentation index, see llms.txt. Use this Use this file to discover all available pages.

Jetpack Compose 修饰符允许你自定义 UI 组件的布局、外观和行为。修饰符相当于 Compose 中的样式属性 —— 它们控制尺寸、内边距、背景、交互等更多内容。

安装

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.

用法

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

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 }}> {/* 基础样式修饰符 */} <Button modifiers={[paddingAll(16), fillMaxWidth(), background('#FF6B6B')]}> 全宽内边距按钮 </Button> {/* 带有边框和阴影的复杂组合 */} <Button modifiers={[paddingAll(12), background('#4ECDC4'), border(2, '#2C3E50'), shadow(4)]}> 带边框和阴影的样式按钮 </Button> </Host> ); }

内边距

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

paddingAll(all)

在四个方向应用相同的内边距。

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

padding(start, top, end, bottom)

为每一侧分别应用内边距。

参数类型描述
startnumber左/起始内边距,单位为 dp。
topnumber上内边距,单位为 dp。
endnumber右/结束内边距,单位为 dp。
bottomnumber下内边距,单位为 dp。
import { padding } from '@expo/ui/jetpack-compose/modifiers'; <Button modifiers={[padding(16, 8, 16, 8)]}>自定义内边距</Button>;

尺寸

控制组件的尺寸。

size(width, height)

为组件设置精确尺寸。

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

fillMaxSize(fraction?)

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

参数类型描述
fractionnumber可用空间的占比(0.0–1.0)。默认值为 1.0
import { fillMaxSize } from '@expo/ui/jetpack-compose/modifiers'; <Button modifiers={[fillMaxSize()]}>填满所有空间</Button> <Button modifiers={[fillMaxSize(0.5)]}>填满一半</Button>

fillMaxWidth(fraction?)

填充可用宽度。

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

fillMaxHeight(fraction?)

填充可用高度。

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

width(value)

设置精确宽度。

参数类型描述
valuenumber宽度,单位为 dp。

height(value)

设置精确高度。

参数类型描述
valuenumber高度,单位为 dp。

wrapContentWidth(alignment?)

将组件尺寸设为包裹其内容宽度。

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

wrapContentHeight(alignment?)

将组件尺寸设为包裹其内容高度。

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

位置

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

offset(x, y)

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

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

外观

控制组件的视觉外观。

background(color)

设置背景颜色。

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

border(borderWidth, borderColor)

在组件周围添加边框。

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

shadow(elevation)

在组件下方添加海拔阴影。

参数类型描述
elevationnumber阴影海拔,单位为 dp。
import { shadow } from '@expo/ui/jetpack-compose/modifiers'; <Button modifiers={[shadow(8)]}>有层级的按钮</Button>;

alpha(alpha)

控制组件的不透明度。

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

blur(radius)

为组件应用模糊效果。

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

变换

对组件应用视觉变换。

rotate(degrees)

旋转组件。

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

zIndex(index)

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

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

动画

为组件内的布局变化添加动画。

animateContentSize(dampingRatio?, stiffness?)

使用弹簧动画为组件内容的尺寸变化添加动画。

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

布局

控制组件在其父容器中的尺寸和位置。

weight(weight)

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

参数类型描述
weightnumber权重因子。
import { weight } from '@expo/ui/jetpack-compose/modifiers'; // 在 Row 中,第一个按钮占 2/3,第二个占 1/3 <Button modifiers={[weight(2)]}>更宽</Button> <Button modifiers={[weight(1)]}>更窄</Button>

align(alignment)

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

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

matchParentSize()

将组件尺寸设为与其父 Box 相同。与 fillMaxSize 不同,这不会影响父级的测量。

import { matchParentSize } from '@expo/ui/jetpack-compose/modifiers'; <Button modifiers={[matchParentSize()]}>匹配父级</Button>;

交互

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

clickable(handler)

使组件响应点击事件。

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

selectable(selected, handler)

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

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

裁剪

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

clip(shape)

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

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

可用形状

形状描述
Shapes.Rectangle一个没有圆角的矩形。
Shapes.Circle一个完美的圆形。
Shapes.RoundedCorner(radius)一个具有统一圆角的矩形。传入 number 表示所有圆角半径相同,或传入对象 { topStart, topEnd, bottomStart, bottomEnd } 为每个角分别设置半径。
Shapes.CutCorner(radius)一个带切角(倒角)的矩形。接受与 RoundedCorner 相同的半径选项。
Shapes.Material.Cookie4Sided具有 4 条边的 Material Design 曲奇形状。
Shapes.Material.Cookie6Sided具有 6 条边的 Material Design 曲奇形状。
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 })), ]}> 仅顶部圆角 </Button> // Cut corners <Button modifiers={[clip(Shapes.CutCorner(8))]}>Cut corners</Button>

工具

testID(tag)

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

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