Jetpack Compose 组件属性详细说明
本文档详细介绍了Jetpack Compose中常用组件的属性配置和使用方法,包含10大类组件说明。重点解析了布局组件(Column、Row、Box、ConstraintLayout)的参数配置,包括排列方式、对齐方式、修饰符等核心属性,并提供了每种组件的函数签名、参数说明和实际使用示例代码。文档采用结构化方式呈现,便于开发者快速查找和理解各组件功能。
Jetpack Compose 组件属性详细说明
本文档详细说明 Jetpack Compose 中各个组件的所有属性、参数和使用方法。
📋 目录
布局组件
Column
垂直排列子组件的布局容器。
函数签名:
@Composable
fun Column(
modifier: Modifier = Modifier,
verticalArrangement: Arrangement.Vertical = Arrangement.Top,
horizontalAlignment: Alignment.Horizontal = Alignment.Start,
content: @Composable ColumnScope.() -> Unit
)
参数说明:
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
modifier |
Modifier |
Modifier |
应用于布局的修饰符 |
verticalArrangement |
Arrangement.Vertical |
Arrangement.Top |
垂直方向子组件的排列方式 |
horizontalAlignment |
Alignment.Horizontal |
Alignment.Start |
水平方向子组件的对齐方式 |
content |
@Composable ColumnScope.() -> Unit |
- | 子组件内容 |
verticalArrangement 可选值:
Arrangement.Top- 顶部对齐Arrangement.Bottom- 底部对齐Arrangement.Center- 居中对齐Arrangement.SpaceBetween- 两端对齐,中间均匀分布Arrangement.SpaceAround- 每个元素周围均匀分布空间Arrangement.SpaceEvenly- 元素之间均匀分布空间Arrangement.spacedBy(space: Dp)- 元素之间固定间距
horizontalAlignment 可选值:
Alignment.Start- 左对齐(LTR)或右对齐(RTL)Alignment.End- 右对齐(LTR)或左对齐(RTL)Alignment.CenterHorizontally- 水平居中Alignment.Left- 左对齐Alignment.Right- 右对齐
使用示例:
Column(
modifier = Modifier
.fillMaxWidth()
.padding(16.dp),
verticalArrangement = Arrangement.spacedBy(8.dp),
horizontalAlignment = Alignment.CenterHorizontally
) {
Text("第一项")
Text("第二项")
Text("第三项")
}
Row
水平排列子组件的布局容器。
函数签名:
@Composable
fun Row(
modifier: Modifier = Modifier,
horizontalArrangement: Arrangement.Horizontal = Arrangement.Start,
verticalAlignment: Alignment.Vertical = Alignment.Top,
content: @Composable RowScope.() -> Unit
)
参数说明:
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
modifier |
Modifier |
Modifier |
应用于布局的修饰符 |
horizontalArrangement |
Arrangement.Horizontal |
Arrangement.Start |
水平方向子组件的排列方式 |
verticalAlignment |
Alignment.Vertical |
Alignment.Top |
垂直方向子组件的对齐方式 |
content |
@Composable RowScope.() -> Unit |
- | 子组件内容 |
horizontalArrangement 可选值:
Arrangement.Start- 起始对齐Arrangement.End- 结束对齐Arrangement.Center- 居中对齐Arrangement.SpaceBetween- 两端对齐Arrangement.SpaceAround- 周围均匀分布Arrangement.SpaceEvenly- 均匀分布Arrangement.spacedBy(space: Dp)- 固定间距
verticalAlignment 可选值:
Alignment.Top- 顶部对齐Alignment.Bottom- 底部对齐Alignment.CenterVertically- 垂直居中
使用示例:
Row(
modifier = Modifier.fillMaxWidth(),
horizontalArrangement = Arrangement.SpaceBetween,
verticalAlignment = Alignment.CenterVertically
) {
Text("左侧")
Text("右侧")
}
Box
允许子组件重叠的布局容器。
函数签名:
@Composable
fun Box(
modifier: Modifier = Modifier,
contentAlignment: Alignment = Alignment.TopStart,
propagateMinConstraints: Boolean = false,
content: @Composable BoxScope.() -> Unit
)
参数说明:
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
modifier |
Modifier |
Modifier |
应用于布局的修饰符 |
contentAlignment |
Alignment |
Alignment.TopStart |
子组件的默认对齐方式 |
propagateMinConstraints |
Boolean |
false |
是否将最小约束传播给子组件 |
content |
@Composable BoxScope.() -> Unit |
- | 子组件内容 |
contentAlignment 常用值:
Alignment.TopStart- 左上角Alignment.TopCenter- 顶部居中Alignment.TopEnd- 右上角Alignment.CenterStart- 左侧居中Alignment.Center- 居中Alignment.CenterEnd- 右侧居中Alignment.BottomStart- 左下角Alignment.BottomCenter- 底部居中Alignment.BottomEnd- 右下角
使用示例:
Box(
modifier = Modifier.size(200.dp),
contentAlignment = Alignment.Center
) {
// 背景
Box(
modifier = Modifier
.fillMaxSize()
.background(Color.Gray)
)
// 前景
Text("居中文本")
}
ConstraintLayout
基于约束的布局系统,类似 XML 中的 ConstraintLayout。
函数签名:
@Composable
fun ConstraintLayout(
modifier: Modifier = Modifier,
optimizationLevel: Int = Optimizer.OPTIMIZATION_STANDARD,
crossinline content: @Composable ConstraintLayoutScope.() -> Unit
)
参数说明:
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
modifier |
Modifier |
Modifier |
应用于布局的修饰符 |
optimizationLevel |
Int |
Optimizer.OPTIMIZATION_STANDARD |
优化级别 |
content |
@Composable ConstraintLayoutScope.() -> Unit |
- | 子组件内容 |
优化级别:
Optimizer.OPTIMIZATION_NONE- 不优化Optimizer.OPTIMIZATION_STANDARD- 标准优化Optimizer.OPTIMIZATION_DIRECT- 直接优化Optimizer.OPTIMIZATION_CHAIN- 链式优化
使用示例:
ConstraintLayout(
modifier = Modifier.fillMaxSize()
) {
val (text1, text2, button) = createRefs()
Text(
text = "文本1",
modifier = Modifier.constrainAs(text1) {
top.linkTo(parent.top, margin = 16.dp)
start.linkTo(parent.start, margin = 16.dp)
}
)
Text(
text = "文本2",
modifier = Modifier.constrainAs(text2) {
top.linkTo(text1.bottom, margin = 8.dp)
start.linkTo(text1.start)
}
)
Button(
onClick = { },
modifier = Modifier.constrainAs(button) {
bottom.linkTo(parent.bottom, margin = 16.dp)
end.linkTo(parent.end, margin = 16.dp)
}
) {
Text("按钮")
}
}
约束方法:
top.linkTo()- 顶部约束bottom.linkTo()- 底部约束start.linkTo()- 起始约束end.linkTo()- 结束约束centerHorizontallyTo()- 水平居中centerVerticallyTo()- 垂直居中centerTo()- 完全居中
文本组件
Text
显示文本的组件。
函数签名:
@Composable
fun Text(
text: String,
modifier: Modifier = Modifier,
color: Color = Color.Unspecified,
fontSize: TextUnit = TextUnit.Unspecified,
fontStyle: FontStyle? = null,
fontWeight: FontWeight? = null,
fontFamily: FontFamily? = null,
letterSpacing: TextUnit = TextUnit.Unspecified,
textDecoration: TextDecoration? = null,
textAlign: TextAlign? = null,
lineHeight: TextUnit = TextUnit.Unspecified,
overflow: TextOverflow = TextOverflow.Clip,
softWrap: Boolean = true,
maxLines: Int = Int.MAX_VALUE,
minLines: Int = 1,
onTextLayout: (TextLayoutResult) -> Unit = {},
style: TextStyle = LocalTextStyle.current
)
参数说明:
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
text |
String |
- | 要显示的文本内容 |
modifier |
Modifier |
Modifier |
修饰符 |
color |
Color |
Color.Unspecified |
文本颜色 |
fontSize |
TextUnit |
TextUnit.Unspecified |
字体大小(如 16.sp) |
fontStyle |
FontStyle? |
null |
字体样式(FontStyle.Normal 或 FontStyle.Italic) |
fontWeight |
FontWeight? |
null |
字体粗细(FontWeight.Normal, FontWeight.Bold 等) |
fontFamily |
FontFamily? |
null |
字体族 |
letterSpacing |
TextUnit |
TextUnit.Unspecified |
字符间距 |
textDecoration |
TextDecoration? |
null |
文本装饰(TextDecoration.Underline, TextDecoration.LineThrough) |
textAlign |
TextAlign? |
null |
文本对齐方式 |
lineHeight |
TextUnit |
TextUnit.Unspecified |
行高 |
overflow |
TextOverflow |
TextOverflow.Clip |
溢出处理方式 |
softWrap |
Boolean |
true |
是否自动换行 |
maxLines |
Int |
Int.MAX_VALUE |
最大行数 |
minLines |
Int |
1 |
最小行数 |
onTextLayout |
(TextLayoutResult) -> Unit |
{} |
文本布局回调 |
style |
TextStyle |
LocalTextStyle.current |
文本样式 |
textAlign 可选值:
TextAlign.Left- 左对齐TextAlign.Right- 右对齐TextAlign.Center- 居中TextAlign.Justify- 两端对齐TextAlign.Start- 起始对齐(根据语言方向)TextAlign.End- 结束对齐(根据语言方向)
overflow 可选值:
TextOverflow.Clip- 裁剪溢出文本TextOverflow.Ellipsis- 使用省略号TextOverflow.Visible- 显示溢出文本
fontWeight 常用值:
FontWeight.Thin(100)FontWeight.ExtraLight(200)FontWeight.Light(300)FontWeight.Normal(400)FontWeight.Medium(500)FontWeight.SemiBold(600)FontWeight.Bold(700)FontWeight.ExtraBold(800)FontWeight.Black(900)
使用示例:
Text(
text = "示例文本",
fontSize = 18.sp,
fontWeight = FontWeight.Bold,
color = Color.Blue,
textAlign = TextAlign.Center,
maxLines = 2,
overflow = TextOverflow.Ellipsis,
modifier = Modifier.fillMaxWidth()
)
TextField
单行文本输入框。
函数签名:
@Composable
fun TextField(
value: String,
onValueChange: (String) -> Unit,
modifier: Modifier = Modifier,
enabled: Boolean = true,
readOnly: Boolean = false,
textStyle: TextStyle = TextStyle.Default,
label: @Composable (() -> Unit)? = null,
placeholder: @Composable (() -> Unit)? = null,
leadingIcon: @Composable (() -> Unit)? = null,
trailingIcon: @Composable (() -> Unit)? = null,
isError: Boolean = false,
visualTransformation: VisualTransformation = VisualTransformation.None,
keyboardOptions: KeyboardOptions = KeyboardOptions.Default,
keyboardActions: KeyboardActions = KeyboardActions.Default,
singleLine: Boolean = false,
maxLines: Int = if (singleLine) 1 else Int.MAX_VALUE,
minLines: Int = 1,
interactionSource: MutableInteractionSource = remember { MutableInteractionSource() },
shape: Shape = TextFieldDefaults.shape,
colors: TextFieldColors = TextFieldDefaults.colors()
)
参数说明:
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
value |
String |
- | 文本值 |
onValueChange |
(String) -> Unit |
- | 值变化回调 |
modifier |
Modifier |
Modifier |
修饰符 |
enabled |
Boolean |
true |
是否启用 |
readOnly |
Boolean |
false |
是否只读 |
textStyle |
TextStyle |
TextStyle.Default |
文本样式 |
label |
@Composable (() -> Unit)? |
null |
标签 |
placeholder |
@Composable (() -> Unit)? |
null |
占位符 |
leadingIcon |
@Composable (() -> Unit)? |
null |
前导图标 |
trailingIcon |
@Composable (() -> Unit)? |
null |
后置图标 |
isError |
Boolean |
false |
是否显示错误状态 |
visualTransformation |
VisualTransformation |
VisualTransformation.None |
视觉转换(如密码遮罩) |
keyboardOptions |
KeyboardOptions |
KeyboardOptions.Default |
键盘选项 |
keyboardActions |
KeyboardActions |
KeyboardActions.Default |
键盘操作 |
singleLine |
Boolean |
false |
是否单行 |
maxLines |
Int |
Int.MAX_VALUE |
最大行数 |
minLines |
Int |
1 |
最小行数 |
interactionSource |
MutableInteractionSource |
- | 交互源 |
shape |
Shape |
TextFieldDefaults.shape |
形状 |
colors |
TextFieldColors |
TextFieldDefaults.colors() |
颜色配置 |
KeyboardOptions 配置:
KeyboardOptions(
keyboardType: KeyboardType = KeyboardType.Text,
imeAction: ImeAction = ImeAction.Default,
capitalization: KeyboardCapitalization = KeyboardCapitalization.None,
autoCorrect: Boolean = true,
autoComplete: Boolean = true
)
KeyboardType 可选值:
KeyboardType.Text- 文本KeyboardType.Ascii- ASCIIKeyboardType.Number- 数字KeyboardType.Phone- 电话KeyboardType.Uri- URIKeyboardType.Email- 邮箱KeyboardType.Password- 密码KeyboardType.NumberPassword- 数字密码KeyboardType.Decimal- 小数
ImeAction 可选值:
ImeAction.None- 无操作ImeAction.Go- 前往ImeAction.Search- 搜索ImeAction.Send- 发送ImeAction.Next- 下一个ImeAction.Done- 完成ImeAction.Previous- 上一个ImeAction.Default- 默认
使用示例:
var text by remember { mutableStateOf("") }
TextField(
value = text,
onValueChange = { text = it },
label = { Text("用户名") },
placeholder = { Text("请输入用户名") },
leadingIcon = { Icon(Icons.Default.Person, null) },
trailingIcon = {
if (text.isNotEmpty()) {
IconButton(onClick = { text = "" }) {
Icon(Icons.Default.Clear, null)
}
}
},
keyboardOptions = KeyboardOptions(
keyboardType = KeyboardType.Text,
imeAction = ImeAction.Done
),
keyboardActions = KeyboardActions(
onDone = { /* 处理完成 */ }
),
singleLine = true,
modifier = Modifier.fillMaxWidth()
)
OutlinedTextField
带边框的文本输入框。
函数签名:
@Composable
fun OutlinedTextField(
// 参数与 TextField 相同
)
使用示例:
OutlinedTextField(
value = text,
onValueChange = { text = it },
label = { Text("标签") },
modifier = Modifier.fillMaxWidth()
)
按钮组件
Button
Material Design 按钮。
函数签名:
@Composable
fun Button(
onClick: () -> Unit,
modifier: Modifier = Modifier,
enabled: Boolean = true,
shape: Shape = ButtonDefaults.shape,
colors: ButtonColors = ButtonDefaults.buttonColors(),
elevation: ButtonElevation? = ButtonDefaults.buttonElevation(),
border: BorderStroke? = null,
contentPadding: PaddingValues = ButtonDefaults.ContentPadding,
interactionSource: MutableInteractionSource = remember { MutableInteractionSource() },
content: @Composable RowScope.() -> Unit
)
参数说明:
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
onClick |
() -> Unit |
- | 点击事件 |
modifier |
Modifier |
Modifier |
修饰符 |
enabled |
Boolean |
true |
是否启用 |
shape |
Shape |
ButtonDefaults.shape |
形状 |
colors |
ButtonColors |
ButtonDefaults.buttonColors() |
颜色配置 |
elevation |
ButtonElevation? |
ButtonDefaults.buttonElevation() |
elevation 配置 |
border |
BorderStroke? |
null |
边框 |
contentPadding |
PaddingValues |
ButtonDefaults.ContentPadding |
内容内边距 |
interactionSource |
MutableInteractionSource |
- | 交互源 |
content |
@Composable RowScope.() -> Unit |
- | 按钮内容 |
使用示例:
Button(
onClick = { /* 点击事件 */ },
enabled = true,
modifier = Modifier.padding(16.dp),
colors = ButtonDefaults.buttonColors(
containerColor = Color.Blue,
contentColor = Color.White
),
shape = RoundedCornerShape(8.dp)
) {
Icon(Icons.Default.Add, null)
Spacer(modifier = Modifier.width(8.dp))
Text("按钮")
}
TextButton
文本样式的按钮。
函数签名:
@Composable
fun TextButton(
onClick: () -> Unit,
modifier: Modifier = Modifier,
enabled: Boolean = true,
shape: Shape = TextButtonDefaults.shape,
colors: ButtonColors = TextButtonDefaults.buttonColors(),
border: BorderStroke? = null,
contentPadding: PaddingValues = TextButtonDefaults.ContentPadding,
interactionSource: MutableInteractionSource = remember { MutableInteractionSource() },
content: @Composable RowScope.() -> Unit
)
使用示例:
TextButton(onClick = { }) {
Text("文本按钮")
}
OutlinedButton
轮廓样式的按钮。
函数签名:
@Composable
fun OutlinedButton(
onClick: () -> Unit,
modifier: Modifier = Modifier,
enabled: Boolean = true,
shape: Shape = OutlinedButtonDefaults.shape,
colors: ButtonColors = OutlinedButtonDefaults.buttonColors(),
border: BorderStroke? = OutlinedButtonDefaults.border,
contentPadding: PaddingValues = OutlinedButtonDefaults.ContentPadding,
interactionSource: MutableInteractionSource = remember { MutableInteractionSource() },
content: @Composable RowScope.() -> Unit
)
使用示例:
OutlinedButton(onClick = { }) {
Text("轮廓按钮")
}
IconButton
图标按钮。
函数签名:
@Composable
fun IconButton(
onClick: () -> Unit,
modifier: Modifier = Modifier,
enabled: Boolean = true,
interactionSource: MutableInteractionSource = remember { MutableInteractionSource() },
content: @Composable () -> Unit
)
使用示例:
IconButton(onClick = { }) {
Icon(Icons.Default.Favorite, contentDescription = "收藏")
}
FloatingActionButton
浮动操作按钮。
函数签名:
@Composable
fun FloatingActionButton(
onClick: () -> Unit,
modifier: Modifier = Modifier,
shape: Shape = FloatingActionButtonDefaults.shape,
containerColor: Color = FloatingActionButtonDefaults.containerColor,
contentColor: Color = FloatingActionButtonDefaults.contentColor,
elevation: FloatingActionButtonElevation = FloatingActionButtonDefaults.elevation(),
interactionSource: MutableInteractionSource = remember { MutableInteractionSource() },
content: @Composable () -> Unit
)
使用示例:
FloatingActionButton(
onClick = { },
containerColor = MaterialTheme.colorScheme.primary
) {
Icon(Icons.Default.Add, contentDescription = "添加")
}
输入组件
Checkbox
复选框。
函数签名:
@Composable
fun Checkbox(
checked: Boolean,
onCheckedChange: ((Boolean) -> Unit)?,
modifier: Modifier = Modifier,
enabled: Boolean = true,
colors: CheckboxColors = CheckboxDefaults.colors(),
interactionSource: MutableInteractionSource = remember { MutableInteractionSource() }
)
参数说明:
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
checked |
Boolean |
- | 选中状态 |
onCheckedChange |
((Boolean) -> Unit)? |
- | 状态变化回调 |
modifier |
Modifier |
Modifier |
修饰符 |
enabled |
Boolean |
true |
是否启用 |
colors |
CheckboxColors |
CheckboxDefaults.colors() |
颜色配置 |
interactionSource |
MutableInteractionSource |
- | 交互源 |
使用示例:
var checked by remember { mutableStateOf(false) }
Checkbox(
checked = checked,
onCheckedChange = { checked = it }
)
RadioButton
单选按钮。
函数签名:
@Composable
fun RadioButton(
selected: Boolean,
onClick: (() -> Unit)?,
modifier: Modifier = Modifier,
enabled: Boolean = true,
colors: RadioButtonColors = RadioButtonDefaults.colors(),
interactionSource: MutableInteractionSource = remember { MutableInteractionSource() }
)
使用示例:
var selectedOption by remember { mutableStateOf("option1") }
RadioButton(
selected = selectedOption == "option1",
onClick = { selectedOption = "option1" }
)
Switch
开关。
函数签名:
@Composable
fun Switch(
checked: Boolean,
onCheckedChange: ((Boolean) -> Unit)?,
modifier: Modifier = Modifier,
enabled: Boolean = true,
colors: SwitchColors = SwitchDefaults.colors(),
thumbContent: (@Composable () -> Unit)? = null,
interactionSource: MutableInteractionSource = remember { MutableInteractionSource() }
)
使用示例:
var isChecked by remember { mutableStateOf(false) }
Switch(
checked = isChecked,
onCheckedChange = { isChecked = it }
)
Slider
滑块。
函数签名:
@Composable
fun Slider(
value: Float,
onValueChange: (Float) -> Unit,
modifier: Modifier = Modifier,
enabled: Boolean = true,
valueRange: ClosedFloatingPointRange<Float> = 0f..1f,
steps: Int = 0,
onValueChangeFinished: (() -> Unit)? = null,
colors: SliderColors = SliderDefaults.colors(),
interactionSource: MutableInteractionSource = remember { MutableInteractionSource() }
)
参数说明:
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
value |
Float |
- | 当前值 |
onValueChange |
(Float) -> Unit |
- | 值变化回调 |
modifier |
Modifier |
Modifier |
修饰符 |
enabled |
Boolean |
true |
是否启用 |
valueRange |
ClosedFloatingPointRange<Float> |
0f..1f |
值范围 |
steps |
Int |
0 |
分段数(0 表示连续) |
onValueChangeFinished |
(() -> Unit)? |
null |
值变化完成回调 |
colors |
SliderColors |
SliderDefaults.colors() |
颜色配置 |
interactionSource |
MutableInteractionSource |
- | 交互源 |
使用示例:
var progress by remember { mutableStateOf(50f) }
Slider(
value = progress,
onValueChange = { progress = it },
valueRange = 0f..100f,
steps = 4
)
列表组件
LazyColumn
垂直懒加载列表。
函数签名:
@Composable
fun LazyColumn(
modifier: Modifier = Modifier,
state: LazyListState = rememberLazyListState(),
contentPadding: PaddingValues = PaddingValues(0.dp),
reverseLayout: Boolean = false,
verticalArrangement: Arrangement.Vertical = if (!reverseLayout) Arrangement.Top else Arrangement.Bottom,
horizontalAlignment: Alignment.Horizontal = Alignment.Start,
flingBehavior: FlingBehavior = ScrollableDefaults.flingBehavior(),
userScrollEnabled: Boolean = true,
content: LazyListScope.() -> Unit
)
参数说明:
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
modifier |
Modifier |
Modifier |
修饰符 |
state |
LazyListState |
rememberLazyListState() |
列表状态 |
contentPadding |
PaddingValues |
PaddingValues(0.dp) |
内容内边距 |
reverseLayout |
Boolean |
false |
是否反向布局 |
verticalArrangement |
Arrangement.Vertical |
Arrangement.Top |
垂直排列方式 |
horizontalAlignment |
Alignment.Horizontal |
Alignment.Start |
水平对齐方式 |
flingBehavior |
FlingBehavior |
ScrollableDefaults.flingBehavior() |
滑动行为 |
userScrollEnabled |
Boolean |
true |
是否允许用户滚动 |
content |
LazyListScope.() -> Unit |
- | 列表内容 |
LazyListScope 方法:
item { }- 添加单个项目items(count: Int) { index -> }- 添加多个项目(通过索引)items(items: List<T>, key: ((item: T) -> Any)? = null) { item -> }- 添加列表项目itemsIndexed(items: List<T>) { index, item -> }- 添加带索引的列表项目
使用示例:
val items = remember { (1..100).toList() }
LazyColumn(
modifier = Modifier.fillMaxSize(),
contentPadding = PaddingValues(16.dp),
verticalArrangement = Arrangement.spacedBy(8.dp)
) {
item {
Text("头部", style = MaterialTheme.typography.headlineMedium)
}
items(items = items, key = { it }) { item ->
Card(
modifier = Modifier.fillMaxWidth()
) {
Text("项目 $item", modifier = Modifier.padding(16.dp))
}
}
item {
Text("底部", style = MaterialTheme.typography.bodyMedium)
}
}
LazyRow
水平懒加载列表。
函数签名:
@Composable
fun LazyRow(
modifier: Modifier = Modifier,
state: LazyListState = rememberLazyListState(),
contentPadding: PaddingValues = PaddingValues(0.dp),
reverseLayout: Boolean = false,
horizontalArrangement: Arrangement.Horizontal = if (!reverseLayout) Arrangement.Start else Arrangement.End,
verticalAlignment: Alignment.Vertical = Alignment.Top,
flingBehavior: FlingBehavior = ScrollableDefaults.flingBehavior(),
userScrollEnabled: Boolean = true,
content: LazyListScope.() -> Unit
)
使用示例:
LazyRow(
horizontalArrangement = Arrangement.spacedBy(8.dp),
contentPadding = PaddingValues(horizontal = 16.dp)
) {
items(items = items) { item ->
ItemCard(item = item)
}
}
LazyVerticalGrid
垂直网格列表。
函数签名:
@Composable
fun LazyVerticalGrid(
columns: GridCells,
modifier: Modifier = Modifier,
state: LazyGridState = rememberLazyGridState(),
contentPadding: PaddingValues = PaddingValues(0.dp),
reverseLayout: Boolean = false,
verticalArrangement: Arrangement.Vertical = Arrangement.spacedBy(0.dp),
horizontalArrangement: Arrangement.Horizontal = Arrangement.spacedBy(0.dp),
flingBehavior: FlingBehavior = ScrollableDefaults.flingBehavior(),
userScrollEnabled: Boolean = true,
content: LazyGridScope.() -> Unit
)
GridCells 类型:
GridCells.Fixed(count: Int)- 固定列数GridCells.Adaptive(minSize: Dp)- 自适应列数(根据最小尺寸)
使用示例:
LazyVerticalGrid(
columns = GridCells.Fixed(2),
contentPadding = PaddingValues(16.dp),
horizontalArrangement = Arrangement.spacedBy(8.dp),
verticalArrangement = Arrangement.spacedBy(8.dp)
) {
items(items = items) { item ->
ItemCard(item = item)
}
}
导航组件
TabRow
固定标签栏。
函数签名:
@Composable
fun TabRow(
selectedTabIndex: Int,
modifier: Modifier = Modifier,
container: @Composable (Modifier) -> Unit = @Composable { modifier ->
Surface(modifier = modifier) {}
},
contentColor: Color = TabRowDefaults.contentColor,
divider: @Composable () -> Unit = @Composable {
TabRowDefaults.Divider()
},
indicator: @Composable (tabPositions: List<TabPosition>) -> Unit = @Composable { tabPositions ->
TabRowDefaults.Indicator()
},
tabs: @Composable () -> Unit
)
参数说明:
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
selectedTabIndex |
Int |
- | 选中的标签索引 |
modifier |
Modifier |
Modifier |
修饰符 |
container |
@Composable (Modifier) -> Unit |
Surface |
容器组件 |
contentColor |
Color |
TabRowDefaults.contentColor |
内容颜色 |
divider |
@Composable () -> Unit |
TabRowDefaults.Divider() |
分隔线 |
indicator |
@Composable (List<TabPosition>) -> Unit |
TabRowDefaults.Indicator() |
指示器 |
tabs |
@Composable () -> Unit |
- | 标签内容 |
使用示例:
var selectedTabIndex by remember { mutableStateOf(0) }
val tabs = listOf("标签1", "标签2", "标签3")
TabRow(selectedTabIndex = selectedTabIndex) {
tabs.forEachIndexed { index, title ->
Tab(
selected = selectedTabIndex == index,
onClick = { selectedTabIndex = index },
text = { Text(title) }
)
}
}
ScrollableTabRow
可滚动的标签栏。
函数签名:
@Composable
fun ScrollableTabRow(
selectedTabIndex: Int,
modifier: Modifier = Modifier,
edgePadding: Dp = TabRowDefaults.ScrollableTabRowPadding,
container: @Composable (Modifier) -> Unit = @Composable { modifier ->
Surface(modifier = modifier) {}
},
contentColor: Color = TabRowDefaults.contentColor,
divider: @Composable () -> Unit = @Composable {
TabRowDefaults.Divider()
},
indicator: @Composable (tabPositions: List<TabPosition>) -> Unit = @Composable { tabPositions ->
TabRowDefaults.Indicator()
},
tabs: @Composable () -> Unit
)
使用示例:
ScrollableTabRow(selectedTabIndex = selectedTabIndex) {
tabs.forEachIndexed { index, title ->
Tab(
selected = selectedTabIndex == index,
onClick = { selectedTabIndex = index },
text = { Text(title) }
)
}
}
Tab
标签项。
函数签名:
@Composable
fun Tab(
selected: Boolean,
onClick: () -> Unit,
modifier: Modifier = Modifier,
enabled: Boolean = true,
text: @Composable (() -> Unit)? = null,
icon: @Composable (() -> Unit)? = null,
selectedContentColor: Color = TabDefaults.selectedContentColor(),
unselectedContentColor: Color = TabDefaults.unselectedContentColor(),
interactionSource: MutableInteractionSource = remember { MutableInteractionSource() }
)
使用示例:
Tab(
selected = true,
onClick = { },
text = { Text("标签") },
icon = { Icon(Icons.Default.Home, null) }
)
NavigationBar
底部导航栏(Material 3)。
函数签名:
@Composable
fun NavigationBar(
modifier: Modifier = Modifier,
containerColor: Color = NavigationBarDefaults.containerColor,
contentColor: Color = MaterialTheme.colorScheme.contentColorFor(containerColor),
tonalElevation: Dp = NavigationBarDefaults.Elevation,
windowInsets: WindowInsets = NavigationBarDefaults.windowInsets,
content: @Composable RowScope.() -> Unit
)
使用示例:
NavigationBar {
items.forEach { item ->
NavigationBarItem(
icon = { Icon(item.icon, null) },
label = { Text(item.label) },
selected = selectedItem == item.route,
onClick = { selectedItem = item.route }
)
}
}
NavigationBarItem
底部导航栏项。
函数签名:
@Composable
fun NavigationBarItem(
selected: Boolean,
onClick: () -> Unit,
icon: @Composable () -> Unit,
modifier: Modifier = Modifier,
enabled: Boolean = true,
label: @Composable (() -> Unit)? = null,
alwaysShowLabel: Boolean = true,
colors: NavigationBarItemColors = NavigationBarItemDefaults.colors(),
interactionSource: MutableInteractionSource = remember { MutableInteractionSource() }
)
使用示例:
NavigationBarItem(
selected = true,
onClick = { },
icon = { Icon(Icons.Default.Home, null) },
label = { Text("首页") }
)
对话框组件
Dialog
自定义对话框。
函数签名:
@Composable
fun Dialog(
onDismissRequest: () -> Unit,
properties: DialogProperties = DialogProperties(),
content: @Composable () -> Unit
)
参数说明:
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
onDismissRequest |
() -> Unit |
- | 关闭请求回调 |
properties |
DialogProperties |
DialogProperties() |
对话框属性 |
content |
@Composable () -> Unit |
- | 对话框内容 |
DialogProperties:
DialogProperties(
dismissOnBackPress: Boolean = true,
dismissOnClickOutside: Boolean = true,
usePlatformDefaultWidth: Boolean = true,
decorFitsSystemWindows: Boolean = true
)
使用示例:
var showDialog by remember { mutableStateOf(false) }
if (showDialog) {
Dialog(
onDismissRequest = { showDialog = false },
properties = DialogProperties(
dismissOnBackPress = true,
dismissOnClickOutside = true
)
) {
Card(
modifier = Modifier
.fillMaxWidth()
.padding(16.dp),
shape = RoundedCornerShape(16.dp)
) {
Column(modifier = Modifier.padding(16.dp)) {
Text("对话框内容")
Spacer(modifier = Modifier.height(16.dp))
Button(onClick = { showDialog = false }) {
Text("关闭")
}
}
}
}
}
AlertDialog
警告对话框。
函数签名:
@Composable
fun AlertDialog(
onDismissRequest: () -> Unit,
confirmButton: @Composable () -> Unit,
modifier: Modifier = Modifier,
dismissButton: @Composable (() -> Unit)? = null,
icon: @Composable (() -> Unit)? = null,
title: @Composable (() -> Unit)? = null,
text: @Composable (() -> Unit)? = null,
shape: Shape = AlertDialogDefaults.shape,
containerColor: Color = AlertDialogDefaults.containerColor,
iconContentColor: Color = AlertDialogDefaults.iconContentColor,
titleContentColor: Color = AlertDialogDefaults.titleContentColor,
textContentColor: Color = AlertDialogDefaults.textContentColor,
tonalElevation: Dp = AlertDialogDefaults.TonalElevation
)
参数说明:
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
onDismissRequest |
() -> Unit |
- | 关闭请求回调 |
confirmButton |
@Composable () -> Unit |
- | 确认按钮 |
modifier |
Modifier |
Modifier |
修饰符 |
dismissButton |
@Composable (() -> Unit)? |
null |
取消按钮 |
icon |
@Composable (() -> Unit)? |
null |
图标 |
title |
@Composable (() -> Unit)? |
null |
标题 |
text |
@Composable (() -> Unit)? |
null |
文本内容 |
shape |
Shape |
AlertDialogDefaults.shape |
形状 |
containerColor |
Color |
AlertDialogDefaults.containerColor |
容器颜色 |
iconContentColor |
Color |
AlertDialogDefaults.iconContentColor |
图标颜色 |
titleContentColor |
Color |
AlertDialogDefaults.titleContentColor |
标题颜色 |
textContentColor |
Color |
AlertDialogDefaults.textContentColor |
文本颜色 |
tonalElevation |
Dp |
AlertDialogDefaults.TonalElevation |
高程 |
使用示例:
var showAlert by remember { mutableStateOf(false) }
if (showAlert) {
AlertDialog(
onDismissRequest = { showAlert = false },
icon = { Icon(Icons.Default.Warning, null) },
title = { Text("警告") },
text = { Text("确定要执行此操作吗?") },
confirmButton = {
TextButton(onClick = { showAlert = false }) {
Text("确定")
}
},
dismissButton = {
TextButton(onClick = { showAlert = false }) {
Text("取消")
}
}
)
}
Popup
弹出窗口。
函数签名:
@Composable
fun Popup(
alignment: Alignment = Alignment.TopStart,
offset: IntOffset = IntOffset(0, 0),
onDismissRequest: (() -> Unit)? = null,
properties: PopupProperties = PopupProperties(),
content: @Composable () -> Unit
)
参数说明:
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
alignment |
Alignment |
Alignment.TopStart |
对齐方式 |
offset |
IntOffset |
IntOffset(0, 0) |
偏移量 |
onDismissRequest |
(() -> Unit)? |
null |
关闭请求回调 |
properties |
PopupProperties |
PopupProperties() |
弹出窗口属性 |
content |
@Composable () -> Unit |
- | 内容 |
PopupProperties:
PopupProperties(
dismissOnBackPress: Boolean = false,
dismissOnClickOutside: Boolean = false,
focusable: Boolean = false,
excludeFromSystemGesture: Boolean = false,
clippingEnabled: Boolean = true,
securePolicy: SecureFlagPolicy = SecureFlagPolicy.Inherit
)
使用示例:
var showPopup by remember { mutableStateOf(false) }
var offset by remember { mutableStateOf(IntOffset.Zero) }
Box(
modifier = Modifier
.onGloballyPositioned { coordinates ->
val position = coordinates.positionInWindow()
offset = IntOffset(
x = position.x.toInt(),
y = (position.y + coordinates.size.height).toInt()
)
}
.clickable { showPopup = true }
) {
Text("点击显示弹窗")
}
if (showPopup) {
Popup(
offset = offset,
onDismissRequest = { showPopup = false },
properties = PopupProperties(
dismissOnBackPress = true,
dismissOnClickOutside = true
)
) {
Card {
Text("弹出内容")
}
}
}
显示组件
Image
图片组件。
函数签名:
@Composable
fun Image(
painter: Painter,
contentDescription: String?,
modifier: Modifier = Modifier,
alignment: Alignment = Alignment.Center,
contentScale: ContentScale = ContentScale.Fit,
alpha: Float = DefaultAlpha,
colorFilter: ColorFilter? = null
)
参数说明:
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
painter |
Painter |
- | 图片绘制器 |
contentDescription |
String? |
- | 内容描述(无障碍) |
modifier |
Modifier |
Modifier |
修饰符 |
alignment |
Alignment |
Alignment.Center |
对齐方式 |
contentScale |
ContentScale |
ContentScale.Fit |
内容缩放方式 |
alpha |
Float |
DefaultAlpha |
透明度(0f-1f) |
colorFilter |
ColorFilter? |
null |
颜色过滤器 |
contentScale 可选值:
ContentScale.Fit- 适应容器,保持宽高比ContentScale.Crop- 裁剪以填充容器ContentScale.FillBounds- 填充边界,不保持宽高比ContentScale.FillWidth- 填充宽度ContentScale.FillHeight- 填充高度ContentScale.Inside- 适应内部,保持宽高比ContentScale.None- 不缩放
使用示例:
// 资源图片
Image(
painter = painterResource(id = R.drawable.ic_launcher),
contentDescription = "应用图标",
modifier = Modifier.size(100.dp),
contentScale = ContentScale.Crop
)
// 网络图片(使用 Coil)
AsyncImage(
model = "https://example.com/image.jpg",
contentDescription = "网络图片",
modifier = Modifier.size(200.dp),
contentScale = ContentScale.Crop
)
Icon
图标组件。
函数签名:
@Composable
fun Icon(
imageVector: ImageVector,
contentDescription: String?,
modifier: Modifier = Modifier,
tint: Color = LocalContentColor.current.copy(alpha = LocalContentAlpha.current)
)
参数说明:
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
imageVector |
ImageVector |
- | 图标向量 |
contentDescription |
String? |
- | 内容描述 |
modifier |
Modifier |
Modifier |
修饰符 |
tint |
Color |
LocalContentColor.current |
着色 |
使用示例:
Icon(
imageVector = Icons.Default.Favorite,
contentDescription = "收藏",
tint = Color.Red,
modifier = Modifier.size(24.dp)
)
CircularProgressIndicator
圆形进度指示器。
函数签名:
@Composable
fun CircularProgressIndicator(
modifier: Modifier = Modifier,
progress: Float = 1f,
color: Color = MaterialTheme.colorScheme.primary,
strokeWidth: Dp = 4.dp,
trackColor: Color = MaterialTheme.colorScheme.surfaceVariant,
strokeCap: StrokeCap = StrokeCap.Butt
)
参数说明:
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
modifier |
Modifier |
Modifier |
修饰符 |
progress |
Float |
1f |
进度值(0f-1f,1f 表示不确定) |
color |
Color |
MaterialTheme.colorScheme.primary |
进度颜色 |
strokeWidth |
Dp |
4.dp |
线条宽度 |
trackColor |
Color |
MaterialTheme.colorScheme.surfaceVariant |
轨道颜色 |
strokeCap |
StrokeCap |
StrokeCap.Butt |
线条端点样式 |
使用示例:
// 不确定进度
CircularProgressIndicator()
// 确定进度
var progress by remember { mutableStateOf(0.5f) }
CircularProgressIndicator(
progress = progress,
modifier = Modifier.size(48.dp),
strokeWidth = 4.dp
)
LinearProgressIndicator
线性进度指示器。
函数签名:
@Composable
fun LinearProgressIndicator(
modifier: Modifier = Modifier,
progress: Float = 1f,
color: Color = MaterialTheme.colorScheme.primary,
trackColor: Color = MaterialTheme.colorScheme.surfaceVariant,
strokeCap: StrokeCap = StrokeCap.Butt
)
使用示例:
LinearProgressIndicator(
progress = 0.5f,
modifier = Modifier.fillMaxWidth()
)
容器组件
Card
卡片容器。
函数签名:
@Composable
fun Card(
modifier: Modifier = Modifier,
shape: Shape = CardDefaults.shape,
colors: CardColors = CardDefaults.cardColors(),
elevation: CardElevation = CardDefaults.cardElevation(),
border: BorderStroke? = null,
content: @Composable ColumnScope.() -> Unit
)
参数说明:
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
modifier |
Modifier |
Modifier |
修饰符 |
shape |
Shape |
CardDefaults.shape |
形状 |
colors |
CardColors |
CardDefaults.cardColors() |
颜色配置 |
elevation |
CardElevation |
CardDefaults.cardElevation() |
高程 |
border |
BorderStroke? |
null |
边框 |
content |
@Composable ColumnScope.() -> Unit |
- | 内容 |
使用示例:
Card(
modifier = Modifier
.fillMaxWidth()
.padding(16.dp),
shape = RoundedCornerShape(12.dp),
elevation = CardDefaults.cardElevation(defaultElevation = 4.dp)
) {
Column(modifier = Modifier.padding(16.dp)) {
Text("卡片标题", style = MaterialTheme.typography.titleLarge)
Spacer(modifier = Modifier.height(8.dp))
Text("卡片内容", style = MaterialTheme.typography.bodyMedium)
}
}
OutlinedCard
轮廓卡片。
函数签名:
@Composable
fun OutlinedCard(
modifier: Modifier = Modifier,
shape: Shape = CardDefaults.shape,
colors: CardColors = CardDefaults.cardColors(),
border: BorderStroke = CardDefaults.outlinedCardBorder(),
content: @Composable ColumnScope.() -> Unit
)
使用示例:
OutlinedCard(
modifier = Modifier.fillMaxWidth()
) {
Text("轮廓卡片", modifier = Modifier.padding(16.dp))
}
Surface
表面容器。
函数签名:
@Composable
fun Surface(
modifier: Modifier = Modifier,
shape: Shape = RectangleShape,
color: Color = MaterialTheme.colorScheme.surface,
contentColor: Color = contentColorFor(color),
tonalElevation: Dp = 0.dp,
shadowElevation: Dp = 0.dp,
border: BorderStroke? = null,
content: @Composable () -> Unit
)
参数说明:
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
modifier |
Modifier |
Modifier |
修饰符 |
shape |
Shape |
RectangleShape |
形状 |
color |
Color |
MaterialTheme.colorScheme.surface |
颜色 |
contentColor |
Color |
contentColorFor(color) |
内容颜色 |
tonalElevation |
Dp |
0.dp |
色调高程 |
shadowElevation |
Dp |
0.dp |
阴影高程 |
border |
BorderStroke? |
null |
边框 |
content |
@Composable () -> Unit |
- | 内容 |
使用示例:
Surface(
modifier = Modifier.fillMaxWidth(),
shape = RoundedCornerShape(8.dp),
tonalElevation = 2.dp,
color = MaterialTheme.colorScheme.surface
) {
Text("表面内容", modifier = Modifier.padding(16.dp))
}
Scaffold
脚手架布局(Material Design 标准布局)。
函数签名:
@Composable
fun Scaffold(
modifier: Modifier = Modifier,
topBar: @Composable () -> Unit = {},
bottomBar: @Composable () -> Unit = {},
snackbarHost: @Composable (SnackbarHostState) -> Unit = { SnackbarHost(it) },
floatingActionButton: @Composable () -> Unit = {},
floatingActionButtonPosition: FabPosition = FabPosition.End,
containerColor: Color = MaterialTheme.colorScheme.background,
contentColor: Color = contentColorFor(containerColor),
contentWindowInsets: WindowInsets = ScaffoldDefaults.contentWindowInsets,
content: @Composable (PaddingValues) -> Unit
)
参数说明:
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
modifier |
Modifier |
Modifier |
修饰符 |
topBar |
@Composable () -> Unit |
{} |
顶部栏 |
bottomBar |
@Composable () -> Unit |
{} |
底部栏 |
snackbarHost |
@Composable (SnackbarHostState) -> Unit |
{ SnackbarHost(it) } |
Snackbar 宿主 |
floatingActionButton |
@Composable () -> Unit |
{} |
浮动操作按钮 |
floatingActionButtonPosition |
FabPosition |
FabPosition.End |
FAB 位置 |
containerColor |
Color |
MaterialTheme.colorScheme.background |
容器颜色 |
contentColor |
Color |
contentColorFor(containerColor) |
内容颜色 |
contentWindowInsets |
WindowInsets |
ScaffoldDefaults.contentWindowInsets |
内容窗口插入 |
content |
@Composable (PaddingValues) -> Unit |
- | 内容(接收 PaddingValues) |
使用示例:
val snackbarHostState = remember { SnackbarHostState() }
Scaffold(
topBar = {
TopAppBar(
title = { Text("标题") }
)
},
bottomBar = {
NavigationBar {
// 导航项
}
},
floatingActionButton = {
FloatingActionButton(onClick = { }) {
Icon(Icons.Default.Add, null)
}
},
snackbarHost = {
SnackbarHost(hostState = snackbarHostState)
}
) { paddingValues ->
// 主内容
LazyColumn(
modifier = Modifier
.fillMaxSize()
.padding(paddingValues)
) {
items(items = dataList) { item ->
ItemCard(item = item)
}
}
}
修饰符 (Modifier)
尺寸修饰符
| 修饰符 | 说明 | 示例 |
|---|---|---|
size(width: Dp, height: Dp) |
设置固定尺寸 | Modifier.size(100.dp) |
size(size: Dp) |
设置正方形尺寸 | Modifier.size(100.dp) |
width(width: Dp) |
设置宽度 | Modifier.width(200.dp) |
height(height: Dp) |
设置高度 | Modifier.height(100.dp) |
fillMaxSize(fraction: Float = 1f) |
填充最大尺寸 | Modifier.fillMaxSize() |
fillMaxWidth(fraction: Float = 1f) |
填充最大宽度 | Modifier.fillMaxWidth() |
fillMaxHeight(fraction: Float = 1f) |
填充最大高度 | Modifier.fillMaxHeight() |
wrapContentSize() |
包裹内容尺寸 | Modifier.wrapContentSize() |
defaultMinSize(minWidth: Dp, minHeight: Dp) |
设置最小尺寸 | Modifier.defaultMinSize(50.dp) |
布局修饰符
| 修饰符 | 说明 | 示例 |
|---|---|---|
padding(all: Dp) |
所有方向内边距 | Modifier.padding(16.dp) |
padding(horizontal: Dp, vertical: Dp) |
水平和垂直内边距 | Modifier.padding(16.dp, 8.dp) |
padding(start: Dp, top: Dp, end: Dp, bottom: Dp) |
各方向内边距 | Modifier.padding(16.dp, 8.dp, 16.dp, 8.dp) |
padding(paddingValues: PaddingValues) |
使用 PaddingValues | Modifier.padding(PaddingValues(16.dp)) |
offset(x: Dp, y: Dp) |
偏移位置 | Modifier.offset(10.dp, 5.dp) |
offset(offset: IntOffset) |
使用 IntOffset 偏移 | Modifier.offset(IntOffset(10, 5)) |
weight(weight: Float, fill: Boolean = true) |
权重(Row/Column 内) | Modifier.weight(1f) |
align(alignment: Alignment) |
对齐(Box/Column/Row 内) | Modifier.align(Alignment.Center) |
背景和边框修饰符
| 修饰符 | 说明 | 示例 |
|---|---|---|
background(color: Color, shape: Shape?) |
背景颜色 | Modifier.background(Color.Blue) |
background(brush: Brush, shape: Shape?) |
背景渐变 | Modifier.background(Brush.horizontalGradient(...)) |
border(width: Dp, color: Color, shape: Shape?) |
边框 | Modifier.border(2.dp, Color.Red) |
border(width: Dp, brush: Brush, shape: Shape?) |
渐变边框 | Modifier.border(2.dp, Brush.linearGradient(...)) |
形状修饰符
| 修饰符 | 说明 | 示例 |
|---|---|---|
clip(shape: Shape) |
裁剪形状 | Modifier.clip(RoundedCornerShape(8.dp)) |
clipToBounds() |
裁剪到边界 | Modifier.clipToBounds() |
交互修饰符
| 修饰符 | 说明 | 示例 |
|---|---|---|
clickable(onClick: () -> Unit) |
点击事件 | Modifier.clickable { } |
clickable(interactionSource, indication, enabled, onClickLabel, role, onClick) |
完整点击配置 | Modifier.clickable(...) |
scrollable(state: ScrollableState, orientation: Orientation) |
可滚动 | Modifier.scrollable(...) |
draggable(state: DraggableState, orientation: Orientation) |
可拖拽 | Modifier.draggable(...) |
swipeable(state: SwipeableState, anchors: Map<Float, T>) |
可滑动 | Modifier.swipeable(...) |
透明度修饰符
| 修饰符 | 说明 | 示例 |
|---|---|---|
alpha(alpha: Float) |
透明度 | Modifier.alpha(0.5f) |
graphicsLayer(alpha: Float) |
图形层透明度 | Modifier.graphicsLayer { alpha = 0.5f } |
旋转和缩放修饰符
| 修饰符 | 说明 | 示例 |
|---|---|---|
rotate(degrees: Float) |
旋转 | Modifier.rotate(45f) |
scale(scale: Float) |
缩放 | Modifier.scale(1.5f) |
graphicsLayer(rotationZ: Float, scaleX: Float, scaleY: Float) |
图形层变换 | Modifier.graphicsLayer { rotationZ = 45f } |
其他常用修饰符
| 修饰符 | 说明 | 示例 |
|---|---|---|
fillMaxSize() |
填充父容器 | Modifier.fillMaxSize() |
fillMaxWidth() |
填充宽度 | Modifier.fillMaxWidth() |
fillMaxHeight() |
填充高度 | Modifier.fillMaxHeight() |
aspectRatio(ratio: Float) |
宽高比 | Modifier.aspectRatio(16f / 9f) |
onGloballyPositioned(onPositioned: (LayoutCoordinates) -> Unit) |
位置回调 | Modifier.onGloballyPositioned { } |
onSizeChanged(onSizeChange: (IntSize) -> Unit) |
尺寸变化回调 | Modifier.onSizeChanged { } |
testTag(tag: String) |
测试标签 | Modifier.testTag("button") |
semantics(properties: SemanticsPropertyReceiver.() -> Unit) |
语义属性 | Modifier.semantics { } |
📚 总结
组件选择指南
| 需求 | 推荐组件 |
|---|---|
| 垂直布局 | Column |
| 水平布局 | Row |
| 重叠布局 | Box |
| 复杂约束布局 | ConstraintLayout |
| 垂直列表 | LazyColumn |
| 水平列表 | LazyRow |
| 网格列表 | LazyVerticalGrid |
| 分页视图 | HorizontalPager / VerticalPager |
| 文本显示 | Text |
| 文本输入 | TextField / OutlinedTextField |
| 按钮 | Button / TextButton / OutlinedButton |
| 图标 | Icon |
| 图片 | Image |
| 卡片 | Card / OutlinedCard |
| 对话框 | Dialog / AlertDialog |
| 进度指示 | CircularProgressIndicator / LinearProgressIndicator |
| 标准布局 | Scaffold |
最佳实践
- 状态管理: 使用
remember和mutableStateOf管理组件状态 - 性能优化: 为列表项使用
key()参数 - 可访问性: 为图标和图片提供
contentDescription - 主题适配: 使用
MaterialTheme.colorScheme获取主题颜色 - 响应式设计: 使用
fillMaxWidth()和weight()实现响应式布局 - 修饰符链: 修饰符按顺序应用,注意顺序影响效果
📖 参考资源
更多推荐


所有评论(0)