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)
    )
}
相关推荐
学长毕设3 小时前
基于SpringBoot的实验室资产管理系统
java·spring boot·后端
驰骋工作流3 小时前
流程时效考核的表结构:从待办时限到 WF_CH 考核结果驰骋BPM驰骋低代码低代码工作流引擎
android·低代码·rxjava
zzu123zsw4 小时前
从臃肿的模板调用到声明式契约:深入 UniHttp 动态代理与多渠道生命周期扩展
java·spring boot·microsoft·unihttp
源码集结号5 小时前
云诊所门诊系统源码,基于SpringBoot+Vue.js架构,支持多租户设计与Docker容器化部署
java·spring boot·源码·医院信息系统·门诊系统·诊所系统
传奇开心果编程5 小时前
【Flutter踩坑排雷】第7课:巨型 build 函数坑|全部 UI 写在同一个 build,维护难、隐性异常
android·flutter·ios·移动开发·跨平台·dart·声明式ui
论文复现现场5 小时前
WRF、FEA 能用 L40S 加速吗?求解器检查、断点恢复与长期运行
java·数据库·算法·wrf·有限元分析·gpu计算·断点续算
啃瓜子的松鼠6 小时前
泛微OAe9-后端二开异步调用
java
我是唐青枫6 小时前
Kotlin Delegation 委托详解
开发语言·kotlin
秋天的怀念_David6 小时前
第二十一夜 · 数字黑洞与西西弗斯的惩罚
java·程序人生·算法
外收内放6 小时前
Python基础语法练习题(73)
java·前端·python