Android Jetpack Compose - 组件分类:布局组件、交互组件、文本组件

一、布局组件

1、基本介绍
  1. Box:叠加布局,类似 FrameLayout

  2. Column:垂直线性布局,类似 LinearLayout(vertical)

  3. Row:水平线性布局,类似 LinearLayout(horizontal)

  4. ConstraintLayout:约束布局

2、演示
(1)Box
kotlin 复制代码
Box(
    modifier = Modifier.fillMaxSize(),
    contentAlignment = Alignment.Center,
) {
    Text("test content")
}
kotlin 复制代码
Box(
    modifier = Modifier.fillMaxSize()
) {
    Text(
        text = "content1",
        modifier = Modifier.align(Alignment.TopStart)
    )
    Text(
        text = "content2",
        modifier = Modifier.align(Alignment.TopCenter)
    )
    Text(
        text = "content3",
        modifier = Modifier.align(Alignment.TopEnd)
    )

    Text(
        text = "content4",
        modifier = Modifier.align(Alignment.CenterStart)
    )
    Text(
        text = "content5",
        modifier = Modifier.align(Alignment.Center)
    )
    Text(
        text = "content6",
        modifier = Modifier.align(Alignment.CenterEnd)
    )

    Text(
        text = "content7",
        modifier = Modifier.align(Alignment.BottomStart)
    )
    Text(
        text = "content8",
        modifier = Modifier.align(Alignment.BottomCenter)
    )
    Text(
        text = "content9",
        modifier = Modifier.align(Alignment.BottomEnd)
    )
}
(2)Column
kotlin 复制代码
Column(
    modifier = Modifier
        .fillMaxSize()
        .background(Color.LightGray)
        .padding(16.dp),
    verticalArrangement = Arrangement.Center,
    horizontalAlignment = Alignment.CenterHorizontally
) {
    Text(text = "test123", modifier = Modifier.padding(4.dp))
    Text(text = "test123test123", modifier = Modifier.padding(4.dp))
    Text(text = "test123test123test123", modifier = Modifier.padding(4.dp))
}
(3)Row
kotlin 复制代码
Row(
    modifier = Modifier
        .fillMaxSize()
        .background(Color.LightGray)
        .padding(16.dp),
    horizontalArrangement = Arrangement.Center,
    verticalAlignment = Alignment.CenterVertically
) {
    Text(text = "1", modifier = Modifier.padding(4.dp))
    Text(text = "12", modifier = Modifier.padding(4.dp))
    Text(text = "123", modifier = Modifier.padding(4.dp))
}
(4)ConstraintLayout
kotlin 复制代码
ConstraintLayout(
    modifier = Modifier.fillMaxSize()
) {
    val (button, text, image) = createRefs()

    Button(onClick = {}, modifier = Modifier.constrainAs(button) {
        top.linkTo(parent.top) // button 的顶部链接到父布局的顶部
        start.linkTo(parent.start) // button 的左侧链接到父布局的左侧
    }) {
        Text("test button")
    }

    Text("test content", modifier = Modifier.constrainAs(text) {
        top.linkTo(
            button.bottom, margin = 16.dp
        ) // text 的顶部链接到 button 的底部,底部距离 button 底部 16.dp
        start.linkTo(parent.start) // text 的左侧链接到父布局的左侧
        end.linkTo(parent.end) // text 的右侧链接到父布局的右侧
    })

    Image(
        painter = painterResource(R.drawable.ic_launcher_background),
        contentDescription = null,
        modifier = Modifier
            .size(100.dp)
            .constrainAs(image) {
                top.linkTo(text.bottom)
                bottom.linkTo(parent.bottom)
                start.linkTo(parent.start)
                end.linkTo(parent.end)
            }
    )
}

二、交互组件

1、基本介绍
  1. Button:按钮

  2. TextField:文本输入框

  3. Checkbox:复选框

  4. RadioButton:单选框

  5. Switch:开关

  6. Slider:滑块

2、演示
(1)Button
kotlin 复制代码
val context = LocalContext.current

Column(
    modifier = Modifier.fillMaxSize(),
    horizontalAlignment = Alignment.CenterHorizontally,
    verticalArrangement = Arrangement.Center
) {
    Button(onClick = {
        Toast.makeText(context, "Button Clicked", Toast.LENGTH_SHORT).show()
    }) {
        Text("Button")
    }

    FilledTonalButton(modifier = Modifier.padding(top = 16.dp), onClick = {
        Toast.makeText(context, "FilledTonalButton Clicked", Toast.LENGTH_SHORT).show()
    }) {
        Text("FilledTonalButton")
    }

    OutlinedButton(modifier = Modifier.padding(top = 16.dp), onClick = {
        Toast.makeText(context, "OutlinedButton Clicked", Toast.LENGTH_SHORT).show()
    }) {
        Text("OutlinedButton")
    }

    ElevatedButton(modifier = Modifier.padding(top = 16.dp), onClick = {
        Toast.makeText(context, "ElevatedButton Clicked", Toast.LENGTH_SHORT).show()
    }) {
        Text("ElevatedButton")
    }

    TextButton(modifier = Modifier.padding(top = 16.dp), onClick = {
        Toast.makeText(context, "TextButton Clicked", Toast.LENGTH_SHORT).show()
    }) {
        Text("TextButton")
    }
}
(2)TextField
kotlin 复制代码
val context = LocalContext.current

var text by remember { mutableStateOf("") }

Column(
    modifier = Modifier.fillMaxSize(),
    verticalArrangement = Arrangement.Center,
    horizontalAlignment = Alignment.CenterHorizontally,
) {
    TextField(
        value = text,
        onValueChange = { text = it },
        label = { Text("留言") },
        placeholder = { Text("请输入留言") }
    )

    Button(
        onClick = {
            Toast.makeText(context, text, Toast.LENGTH_SHORT).show()
        }
    ) {
        Text("展示留言")
    }
}
(3)Checkbox
kotlin 复制代码
val context = LocalContext.current

var checked by remember { mutableStateOf(true) }

Box(
    modifier = Modifier.fillMaxSize(),
    contentAlignment = Alignment.Center
) {
    Checkbox(
        checked = checked,
        onCheckedChange = {
            checked = it
            Toast.makeText(context, "checked: $checked", Toast.LENGTH_SHORT).show()
        }
    )
}
(4)RadioButton
kotlin 复制代码
var selected by remember { mutableStateOf(false) }

RadioButton(
    selected = selected,
    onClick = { selected = true }
)
(5)Switch
kotlin 复制代码
var checked by remember { mutableStateOf(true) }

Box(
    modifier = Modifier.fillMaxSize()
) {
    Switch(
        modifier = Modifier.align(Alignment.Center),
        checked = checked,
        onCheckedChange = {
            checked = it
        }
    )
}
(6)Slider
kotlin 复制代码
var sliderPosition by remember { mutableFloatStateOf(0f) }

Column(
    modifier = Modifier
        .fillMaxSize()
        .padding(16.dp),
    horizontalAlignment = Alignment.CenterHorizontally,
    verticalArrangement = Arrangement.Center
) {
    Slider(
        value = sliderPosition,
        onValueChange = { sliderPosition = it }
    )
    Text(text = sliderPosition.toString())
}

三、文本组件

1、基本介绍
  1. Text:基础文本

  2. AnnotatedString:富文本

2、演示
(1)Text
koltin 复制代码
Box(
    modifier = Modifier.fillMaxSize()
) {
    Text("test content", modifier = Modifier.align(Alignment.Center), fontSize = 20.sp)
}
(2)AnnotatedString
koltin 复制代码
Box(
    modifier = Modifier.fillMaxSize()
) {
    Text(
        buildAnnotatedString {
            withStyle(SpanStyle(color = Color.Red, fontSize = 20.sp)) { append("test") }
            append(" content")
        },
        modifier = Modifier.align(Alignment.Center)
    )
}
相关推荐
jinanwuhuaguo5 小时前
(第三十三篇)五月的文明奠基:OpenClaw 2026.5.2版本的文明级解读
android·java·开发语言·人工智能·github·拓扑学·openclaw
xmjd msup6 小时前
spring security 超详细使用教程(接入springboot、前后端分离)
java·spring boot·spring
952366 小时前
SpringBoot统一功能处理
java·spring boot·后端
Lyyaoo.6 小时前
优惠券秒杀业务分析
java·开发语言
消失的旧时光-19437 小时前
统一并发模型:线程、Reactor、协程本质是一件事(从线程到协程 · 第6篇·终章)
java·python·算法
勿忘初心12217 小时前
Java 国密 SM4 加密工具类实战(Hutool + BouncyCastle)|企业级数据加密 + 兼容 JDK8
java·数据安全·数据加密·后端开发·企业级开发·国密 sm4
庞轩px7 小时前
第8篇:原子类与CAS底层原理——无锁并发的实现
java·cas·乐观锁·aba·无锁编程·自旋
rleS IONS7 小时前
SpringBoot中自定义Starter
java·spring boot·后端
千码君20167 小时前
Trae:一些关于flutter和 go前后端开发构建的分享
android·flutter·gradle·android-studio·trae·vibe code
苍煜7 小时前
慢SQL优化实战教学
java·数据库·sql