一、基础控件详解

1. Text - 文本控件
Text(text = "Hello Compose", // 必填,显示文本color = Color.Blue,      // 文字颜色fontSize = 24.sp,        // 字体大小(注意使用.sp单位)fontStyle = FontStyle.Italic, // 字体样式(斜体)fontWeight = FontWeight.Bold, // 字体粗细modifier = Modifier.padding(16.dp)     // 内边距.background(Color.LightGray) // 背景色
)

核心参数说明

  • text:显示的文字内容(必填

  • color:文字颜色(Color.RedColor(0xFF6200EE)等)

  • fontSize:字体大小(必须使用.sp单位,如18.sp

  • fontWeight:字体粗细(FontWeight.NormalBoldW800等)

  • modifier:通用修饰符(设置边距、背景、点击事件等)

  • maxLines:最大行数(超出显示省略号)

  • textDecoration:文本装饰(TextDecoration.Underline下划线)

效果(示意图)

[浅灰色背景]Hello Compose(蓝色,24sp,粗体,斜体)

2. Button - 按钮控件
val context = LocalContext.currentButton(onClick = { // 必填,点击回调Toast.makeText(context, "Clicked!", Toast.LENGTH_SHORT).show()},colors = ButtonDefaults.buttonColors(backgroundColor = Color.Red, // 按钮背景contentColor = Color.White   // 内容颜色),modifier = Modifier.padding(8.dp),enabled = true // 是否启用
) {Icon( // 图标imageVector = Icons.Filled.Favorite,contentDescription = "Like")Spacer(Modifier.width(8.dp)) // 间距Text("Like") // 按钮文字
}

核心参数说明

  • onClick:点击事件回调(必填

  • colors:颜色配置(背景色、文字色)

  • enabled:是否启用(false时变灰色)

  • content:按钮内容(可包含任意Composable)

效果

[红色按钮] ♥ Like(白色文字)
点击后弹出Toast

3. TextField - 输入框控件
var text by remember { mutableStateOf("") } // 关键:状态管理TextField(value = text, // 当前值(绑定状态)onValueChange = { newText -> // 输入变化回调text = newText },label = { Text("Username") }, // 浮动标签placeholder = { Text("Enter your name") }, // 提示文字leadingIcon = { // 前缀图标Icon(Icons.Filled.Person, null) },keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Text, // 键盘类型imeAction = ImeAction.Done        // 键盘动作),modifier = Modifier.fillMaxWidth()
)

核心参数说明

  • value/onValueChange必须配合状态管理remember+mutableStateOf

  • label:浮动标签(输入时上浮)

  • placeholder:提示文本(未输入时显示)

  • keyboardOptions:键盘配置(邮箱/数字键盘等)

  • singleLine:是否单行(true时禁用换行)


4. Image - 图片控件
// 加载本地资源
Image(painter = painterResource(R.drawable.dog),contentDescription = "Cute dog", // 必填(无障碍)modifier = Modifier.size(120.dp).clip(CircleShape), // 圆形裁剪contentScale = ContentScale.Crop // 裁剪模式
)// 加载网络图片(Coil)
AsyncImage(model = "https://example.com/image.jpg",contentDescription = "Network image",placeholder = { // 加载中显示CircularProgressIndicator()},error = { // 错误显示Icon(Icons.Filled.Error, null)}
)

核心参数说明

  • painter:本地资源(painterResource()

  • contentDescription必填(无障碍支持)

  • contentScale:缩放模式(CropFitInside等)

  • alpha:透明度(0.0f-1.0f)

  • colorFilter:颜色滤镜(如黑白效果)


5. ProgressIndicator - 进度指示器
// 圆形进度条
CircularProgressIndicator(progress = 0.7f, // 进度值(0-1)color = Color.Green,strokeWidth = 8.dp,modifier = Modifier.size(50.dp)
)// 线性进度条
LinearProgressIndicator(progress = 0.4f,backgroundColor = Color.LightGray,color = MaterialTheme.colors.primary,modifier = Modifier.fillMaxWidth().padding(16.dp)
)

参数说明

  • progress:进度值(0-1),不传则为不确定进度

  • color:进度条颜色

  • strokeWidth:圆形进度条粗细

  • backgroundColor:线性进度条背景色


二、核心布局详解(附结构图)

1. Column - 垂直布局
Column(modifier = Modifier.fillMaxSize() // 占满父布局.background(Color.LightGray),horizontalAlignment = Alignment.CenterHorizontally, // 水平居中verticalArrangement = Arrangement.SpaceEvenly // 等间距分布
) {Text("Item 1")Button(onClick = {}) { Text("Button") }Image(painterResource(R.drawable.icon), null)
}

参数说明

参数说明常用值
horizontalAlignment子项水平对齐StartCenterHorizontallyEnd
verticalArrangement垂直分布方式TopCenterSpaceBetweenSpaceEvenly
modifier修饰符设置尺寸/背景/边距等

布局效果

┌───────────────────────────┐
│                           │
│          Item 1           │
│                           │
│         [ Button ]        │
│                           │
│          [图标]           │
│                           │
└───────────────────────────┘
(等间距分布)

2. Row - 水平布局
Row(modifier = Modifier.fillMaxWidth().background(Color.LightGray).padding(16.dp).horizontalScroll(rememberScrollState()), // 水平滚动verticalAlignment = Alignment.CenterVertically, // 垂直居中horizontalArrangement = Arrangement.SpaceBetween // 两端对齐
) {Icon(Icons.Filled.Menu, "Menu")Text("Title", fontWeight = FontWeight.Bold)Icon(Icons.Filled.Search, "Search")
}

参数说明

参数说明常用值
verticalAlignment子项垂直对齐TopCenterVerticallyBottom
horizontalArrangement水平分布方式StartCenterSpaceBetweenSpaceAround
.horizontalScroll()水平滚动支持必须添加

布局效果

┌─[菜单]─────标题─────[搜索]─┐
(两端对齐,可横向滚动)

3. Box - 层叠布局
Box(modifier = Modifier.size(200.dp).background(Color.Blue)
) {Image( // 底层painter = painterResource(R.drawable.bg),contentDescription = "Background",modifier = Modifier.fillMaxSize())Text( // 中层"Overlay Text",color = Color.White,modifier = Modifier.align(Alignment.Center).padding(8.dp))Button( // 顶层onClick = {},modifier = Modifier.align(Alignment.BottomEnd).padding(16.dp)) {Text("Action")}
}

关键方法

  • Modifier.align():在Box内定位

    • Alignment.TopStart

    • Alignment.Center

    • Alignment.BottomEnd

  • Modifier.zIndex():控制层级(默认后添加的在上层)

布局效果

┌───────────────────────────┐
│   [背景图片]              │
│                           │
│        居中文字           │
│                           │
│                   [按钮]  │
└───────────────────────────┘
(三层叠加)

三、常见问题

Q1:Compose 为什么需要状态管理?TextField 如何处理状态变化?

// 状态声明
var text by remember { mutableStateOf("") }// 状态绑定
TextField(value = text, // 绑定状态值onValueChange = { newText -> text = newText // 更新状态}
)/*
1. 初始状态 text = ""
2. 用户输入 "A" -> 触发 onValueChange
3. text 更新为 "A"
4. 状态变化触发重组(Recomposition)
5. TextField 根据新值刷新界面
*/
Q2:如何实现列表滚动?

垂直滚动

Column(modifier = Modifier.verticalScroll(rememberScrollState())
) { /* 长内容 */ }

高性能列表(LazyColumn)

LazyColumn {item { Header() }items(100) { index -> // 只渲染可见项ListItem(index)}item { Footer() }
}
Q3:Box 布局如何实现复杂定位?
Box(modifier = Modifier.fillMaxSize()) {// 左上角Text("TopStart", Modifier.align(Alignment.TopStart))// 右上角Button(onClick = {}, Modifier.align(Alignment.TopEnd)) { ... }// 正中央Image(..., Modifier.align(Alignment.Center))// 左下角Icon(..., Modifier.align(Alignment.BottomStart))// 右下角CircularProgressIndicator(Modifier.align(Alignment.BottomEnd))
}
Q4:如何实现响应式布局?
@Composable
fun AdaptiveLayout() {// 根据屏幕宽度选择布局val configuration = LocalConfiguration.currentval screenWidth = configuration.screenWidthDp.dpif (screenWidth < 600.dp) {VerticalLayout() // 小屏:垂直布局} else {HorizontalLayout() // 大屏:水平布局}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/87205.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/87205.shtml
英文地址,请注明出处:http://en.pswp.cn/bicheng/87205.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SCI一区黑翅鸢优化算法+三模型光伏功率预测对比!BKA-CNN-GRU、CNN-GRU、GRU三模型多变量时间序列预测

SCI一区黑翅鸢优化算法三模型光伏功率预测对比&#xff01;BKA-CNN-GRU、CNN-GRU、GRU三模型多变量时间序列预测 目录 SCI一区黑翅鸢优化算法三模型光伏功率预测对比&#xff01;BKA-CNN-GRU、CNN-GRU、GRU三模型多变量时间序列预测效果一览基本介绍程序设计参考资料 效果一览 …

创客匠人视角:创始人 IP 打造为何成为知识变现的核心竞争力

在互联网流量成本高企的当下&#xff0c;知识变现行业正经历从 “产品竞争” 到 “IP 竞争” 的范式迁移。创客匠人 CEO 老蒋指出&#xff0c;创始人 IP 已成为企业突破增长瓶颈的关键支点 —— 美特斯邦威创始人周成建首次直播即创下 1500 万元成交额&#xff0c;印证了创始人…

类图+案例+代码详解:软件设计模式----生成器模式(建造者模式)

生成器模式&#xff08;建造者模式&#xff09; 把复杂对象的建造过程和表示分离&#xff0c;让同样的建造过程可以创建不同的表示。 假设你去快餐店买汉堡&#xff0c;汉堡由面包、肉饼、蔬菜、酱料等部分组成。 建造者模式的角色类比&#xff1a; 产品&#xff08;Product…

UI前端与数字孪生融合探索:为智慧物流提供可视化解决方案

hello宝子们...我们是艾斯视觉擅长ui设计、前端开发、数字孪生、大数据、三维建模、三维动画10年经验!希望我的分享能帮助到您!如需帮助可以评论关注私信我们一起探讨!致敬感谢感恩! 在全球供应链数字化转型的浪潮中&#xff0c;智慧物流正从概念走向落地 —— 据 MarketsandMa…

远程办公与协作新趋势:从远程桌面、VDI到边缘计算,打造高效、安全的混合办公环境

一、引言 随着数字化转型的加速&#xff0c;越来越多的企业开始采用远程办公和混合办公模式&#xff0c;以提升员工的灵活性和企业的敏捷性。然而&#xff0c;异地办公也带来了诸如桌面环境不一致、安全风险增加、沟通协作效率降低等诸多挑战。因此&#xff0c;如何打造一致、…

算法总结篇:二叉树

二叉树解题整体框架&#xff1a; 1、确定当前题型是做高度还是深度还是搜索树还是其他 高度&#xff08;从下往上&#xff0c;求根深度、高度等&#xff09;&#xff1a; 使用后序遍历会更加简单&#xff0c;递归方法一般需要返回值返回上级&#xff0c;让上级对返回值进行判断…

【Elasticsearch】most_fields、best_fields、cross_fields 的区别与用法

most_fields、best_fields、cross_fields 的区别与用法 1.核心区别概述2.详细解析与用法2.1 best_fields&#xff08;最佳字段匹配&#xff09;2.2 most_fields&#xff08;多字段匹配&#xff09;2.3 cross_fields&#xff08;跨字段匹配&#xff09; 3.对比案例3.1 使用 best…

力扣网C语言编程题:在数组中查找目标值位置之暴力解法

一. 简介 本文记录一下力扣网上涉及数组的问题&#xff1a;排序数组中查找目标值的位置。主要以C语言实现。 二. 力扣网C语言编程题&#xff1a;在数组中查找目标值位置 题目&#xff1a;在排序数组中查找元素的第一个和最后一个位置 给你一个按照非递减顺序排列的整数数组 …

OSCP - Proving Grounds - tre

主要知识点 突破边界的方法比较多样观察pspy64的检测结果 具体步骤 依旧nmap扫描开始,开放了80,8082,22端口 Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-12-16 03:39 UTC Nmap scan report for 192.168.56.84 Host is up (0.00083s latency). Not shown: 65532 c…

【Mars3d】支持的basemaps数组与layers数组的坐标系列举

问题场景&#xff1a; basemap 是epsg4326的。&#xff0c;layer 图层是 epsg 4450的。可以在一个页面中展示吗&#xff1f; 回复&#xff1a; 可以不同坐标系叠加&#xff0c;但layer 图层是 epsg 4450的只支持arcgis动态服务&#xff0c;其他情况的不支持 wmts只支持3个坐标…

【算法】509. 斐波那契数

509. 斐波那契数 简单 相关标签 premium lock icon 相关企业 斐波那契数 &#xff08;通常用 F(n) 表示&#xff09;形成的序列称为 斐波那契数列 。该数列由 0 和 1 开始&#xff0c;后面的每一项数字都是前面两项数字的和。也就是&#xff1a; F(0) 0&#xff0c;F(1) 1 …

FOC学习笔记(5)内嵌式电机与表贴式电机的区别

1. 引言 在现代电机设计中&#xff0c;永磁同步电机&#xff08;Permanent Magnet Synchronous Motor, PMSM&#xff09;因其高效率、高功率密度和优异的动态性能&#xff0c;在工业、新能源汽车、航空航天等领域得到广泛应用。根据永磁体在转子中的安装方式不同&#xff0c;永…

算法 按位运算

按位与&#xff08;Bitwise AND&#xff09;和按位异或&#xff08;Bitwise XOR&#xff09; 按位与&#xff08;&&#xff09; 按位与是对两个数的二进制表示的每一位进行逻辑与操作。 规则&#xff1a;两个对应位都为1时&#xff0c;结果位才为1&#xff0c;否则为0。…

python3GUI--基于PyQt5+SQLite3的网址审核系统(详细图文)

文章目录 一&#xff0e;前言二&#xff0e;相关知识1.PyQt52.sqlite3 三&#xff0e;效果预览1.登录2.注册3.普通用户身份权限4.管理员身份权限 三、技术讨论1.数据展示表格1. 更强的表现力和交互性&#xff08;前端功能丰富&#xff09;2. 数据处理效率更高&#xff08;支持大…

与后端现场联调mock数据

当我们后端在现场没办法连后端本地就可以使用mock数据&#xff0c;模拟后端返回数据。使用工具&#xff1a;apifox 一、安装好以后--新建接口 举个栗子&#xff1a; 我想建个接口http://123.123.123.123:8080/api/login 二、 新建期望&#xff0c;返回固定值&#xff0c;否则…

C# 事件(发布者和订阅者)

发布者和订阅者 很多程序都有一个共同的需求&#xff0c;即当一个特定的程序事件发生时&#xff0c;程序的其他部分可以得到 该事件已经发生的通知。 发布者/订阅者模式&#xff08;publisher/subscriber pattem&#xff09;可以满足这种需求。在这种模式中&#xff0c;发布 …

RediSearch高性能全文搜索引擎

RediSearch 是 RedisLabs 团队开发的一个高性能全文搜索引擎&#xff0c;可作为一个 Redis Module 运行在 Redis 上。 Redis7&#xff1a;百万数据级Redis Search 超越 ElasticSearch Redis Search是基于Redis的全文搜索引擎模块&#xff08;RediSearch&#xff09;&#xff0c…

菜谱大全——字符串处理艺术:从文本解析到高效搜索 [特殊字符][特殊字符]

目录 前言一、现实场景二、技术映射2.1 基础刀工&#xff1a;String类2.2 高效剁馅&#xff1a;StringBuilder2.3 精准雕刻&#xff1a;正则表达式 三、知识点呈现3.1 String vs StringBuilder vs StringBuffer3.2 正则表达式核心语法速查3.3 字符串拼接性能陷阱 四、代码实现五…

webpack+vite前端构建工具 -答疑

webpack答疑 1 输入webpack命令&#xff0c;执行的是全局版本还是本地版本的webpack 当在命令行窗口输入webpack命令时&#xff0c;其执行优先级可通过以下步骤明确判断&#xff1a; 1.1 【全局安装优先机制】 执行原理&#xff1a;系统会按照环境变量PATH的顺序逐级查找可执…

API接口开放平台 Crabc 3.4 发布

Crabc 是一款 API 接口开发平台&#xff0c;企业级接口管理、SQL2API 平台。支持动态数据源、动态 SQL 和标签&#xff0c; 支持接入&#xff08;mysql、oracle、达梦、TiDB、hive、es 和 mongodb&#xff09;等 SQL 或 NoSQL 数据源&#xff0c;在线可视化编写 SQL 快速发布接…