Compose 组件 - 一些展示类型
也是组合函数而不是以对象的形式提供。一、文本 Text查看官方介绍Composablefun Text(text: String,modifier: Modifier Modifier,color: Color Color.Unspecified,autoSize: TextAutoSize? null,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)? null,style: TextStyle LocalTextStyle.current,)Text( text Hello Word!, //显示的文本从res中加载stringResource(R.string.str) modifier Modifier, color Color.Red, //文字颜色 autoSize TextAutoSize.StepBased( //根据容器大小自动调整自身尺寸 minFontSize 12.sp, //最小字号默认 12sp maxFontSize 24.sp, //最大字号默认 112sp stepSize 2.sp //步长默认 0.25sp ), fontSize 30.sp, //字号 fontStyle FontStyle.Italic, //文字风格斜体 fontFamily FontFamily.Serif, //字体从res中加载FontFamily(Font(R.font.xxx_light,FontWeight.Light), Font(R.font.xxxbold,FontWeight.Bold)) fontWeight FontWeight.Bold, //文字权重粗细通过构造创建的取值范围1~1000伴生对象中的W100~W900为默认取值方便调用 letterSpacing 15.sp, //字间距 textDecoration TextDecoration.None, //文字修饰Underline下划线LineThrough删除线 textAlign TextAlign.Center, //对齐方式需要有固定宽度才有效果 lineHeight 15.sp, //行高 overflow TextOverflow.Clip, //文字溢出处理 softWrap true, //是否软换行 maxLines 5, //最大行数 minLines 1 //最小行数 // onTextLayout ? style TextStyle(//文本样式阴影、偏移、模糊 shadow Shadow(color Blue, offset Offset(5.0F, 10.0F), blurRadius 3F), textIndent TextIndent(20.sp) //行首缩进 ), onTextLayout { }, //计算布局时回调文本布局发生变化时的回调 )1.1 支持复制 SelectionContainer()默认情况下 Text() 不支持选择复制文字需要使用 SelectionContainer() 组件来包装作用域中可再使用 DisableSelection() 包装不可选择区域。SelectionContainer( Column { Text(This text is selectable) Text(This one too) Text(This one as well) DisableSelection { Text(But not this one) Text(Neither this one) } Text(But again, you can select this one) Text(And this one too) } )Compose v1.12 提供了对 SelectionContainer 内文本选择的编程控制和可观察性。val selectionState rememberSelectionState() Column { Button( onClick { selectionState.selectAll() }, ) { Text(全选) } SelectionContainer(state selectionState) { Text(示例文字、示例文字、示例文字、示例文字、示例文字、示例文字、) } }1.2 富文本 AnnotatedString类似于 View 中的 SpannedStringCompose 中支持的是 AnnotatedString可通过构建器模式 buildAnnotatedString{} 创建。作用域中通过 withStyle() 添加样式文字通过 withLink 添加链接文字。buildAnnotatedString{}创建富文本withStyle()添加样式文字。SpanStyle设置范围样式ParagraphStyle设置段落样式withLink()添加连接文字。TextLinkStyles设置链接样式AnnotatedString.fromHtml()HTML转富文本buildAnnotatedString创建富文本文字inline fun buildAnnotatedString(builder: (Builder).() - Unit): AnnotatedString设置给 Text() 组件的 text 参数。1.2.1 withStyle() 添加样式文字withStyle()添加样式文字inline fun R : Any Builder.withStyle(style: SpanStyle, //范围样式block: Builder.() - R //作用域中调用 append() 添加文字通过 \n 换行): R调用不会换行。inline fun R : Any Builder.withStyle(style: ParagraphStyle, //段落样式crossinline block: Builder.() - R //作用域中继续调用 withStyle()): R调用会换行。SpanStyle范围样式SpanStyle (color: Color Color.Unspecified, //该构造还有 Brush 版本可使用笔刷fontSize: TextUnit TextUnit.Unspecified,fontWeight: FontWeight? null,fontStyle: FontStyle? null,fontSynthesis: FontSynthesis? null,fontFamily: FontFamily? null,fontFeatureSettings: String? null,letterSpacing: TextUnit TextUnit.Unspecified,baselineShift: BaselineShift? null,textGeometricTransform: TextGeometricTransform? null,localeList: LocaleList? null,background: Color Color.Unspecified,textDecoration: TextDecoration? null,shadow: Shadow? null,platformStyle: PlatformSpanStyle? null,drawStyle: DrawStyle? null)ParagraphStyle段落样式class ParagraphStyle(val textAlign: TextAlign TextAlign.Unspecified,val textDirection: TextDirection TextDirection.Unspecified,val lineHeight: TextUnit TextUnit.Unspecified,val textIndent: TextIndent? null,val platformStyle: PlatformParagraphStyle? null,val lineHeightStyle: LineHeightStyle? null,val lineBreak: LineBreak LineBreak.Unspecified,val hyphens: Hyphens Hyphens.Unspecified,val textMotion: TextMotion? null)用来包裹范围样式。Text( text buildAnnotatedString { //添加文字样式不会换行 withStyle(SpanStyle(Color.Green)) { append(绿色的字\n) } //通过\n换行 withStyle(SpanStyle(Color.Green)) { append(绿色的字) } //添加段落样式会换行 withStyle(ParagraphStyle()) { withStyle(SpanStyle(Color.Red)) { append(红色的字) } withStyle(SpanStyle(Color.Blue)) { append(蓝色的字) } } } )1.2.3 withLink() 添加链接文字withLink()添加连接文字inline fun R : Any Builder.withLink(link: LinkAnnotation, //链接注解block: Builder.() - R): RLinkAnnotation.Url创建链接注解class Url(val url: String, //链接地址override val styles: TextLinkStyles? null, //链接样式override val linkInteractionListener: LinkInteractionListener? null) : LinkAnnotation()调用 LinkAnnotation.Url() 创建。TextLinkStyles链接样式class TextLinkStyles(val style: SpanStyle? null,val focusedStyle: SpanStyle? null,val hoveredStyle: SpanStyle? null, //鼠标光标放上去val pressedStyle: SpanStyle? null)只针对HTML中的链接文字设置样式。Text( text buildAnnotatedString { withStyle(SpanStyle(Color.White)) { append(立即下载) } withLink( LinkAnnotation.Url( url https://www.baidu.com, styles TextLinkStyles( style SpanStyle( color Color.Red, textDecoration TextDecoration.Underline ) ) ) ) { append(点击跳转) } } )1.2.3 HTML转富文本HTML转富文本fun AnnotatedString.Companion.fromHtml(htmlString: String, //通过原生字符串引入HTML内容linkStyles: TextLinkStyles? null, //链接样式linkInteractionListener: LinkInteractionListener? null): AnnotatedString设置给 Text() 组件的 text 参数。Text( AnnotatedString.fromHtml( htmlString h1Jetpack Compose/h1 p Build bbetter apps/b faster with a hrefhttps://www.android.comJetpack Compose/a /p , linkStyles TextLinkStyles( style SpanStyle(Color.Red) ) ) )1.3 文字垂直居中Modifier.wrapContentHeight (align Alignment.CenterVertically)1.4 文本溢出处理TextOverflow.Clip裁剪掉溢出的。TextOverflow.Ellipsis末尾省略号。TextOverflow.StartEllipsis开头省略号。展示文件路径时聚焦尾部信息。TextOverflow.MiddleEllipsis文中省略号。展示信息时保护隐私。TextOverflow.Visible尽可能显示。二、图片 Image缩放方式详见2.1 加载本地图片先将图片缩放到和组件大小一致再加载避免先加载超大图片后缩放。Coil会自动处理缩放还会懒加载。Image( painter painterResource(id R.drawable.icon_scan), contentDescription null, //无障碍提示文本信息不需要可直接赋值null alignment Alignment.Center, //对齐方式 contentScale ContentScale.Crop, //伸展方式 alpha 0.5F, //透明度 colorFilter ColorFilter.tint(Color.Red, blendMode BlendMode.Color), //将某种颜色应用到图片上颜色滤镜 // filterQuality FilterQuality.Low, //采样算法默认低bitmap来源才能用 modifier Modifier .width(200.dp) //宽 .height(200.dp) //高 .size(200.dp) //同时设置宽高正方形 .clip(CircleShape) //裁剪成圆形 .border(width 2.dp, color Color.Red, shape CircleShape) //边框 )2.2 加载网络图片详见使用Coil//使用coil加载网络图片 AsyncImage( model https://www.baidu.com/img/PCtm_d9c8750bed0b3c7d089fa7d55720d6cf.png, contentDescription null )三、图标 Icon使用官方图标库需要引入依赖。和 Image 不同的是可以使用 tint 进行染色会受系统 Material 主题影响。implementation androidx.compose.material:material-icons-extended//引用res资源 Icon( painter painterResource(id R.drawable.icon_scan), contentDescription null, modifier Modifier, tint Color.Red //给图标染色 ) //引用官方图标库 Icon(imageVector Icons.Default.AccountBox, contentDescription ) //引用ImageBitmap val bitmap ImageBitmap.imageResource(res LocalContext.current.resources, id R.drawable.icon_scan) Icon(bitmap bitmap, contentDescription四、分割线 Dividerfun HorizontalDivider(modifier: Modifier Modifier,thickness: Dp DividerDefaults.Thickness, //厚度color: Color DividerDefaults.color //颜色)横向分割线fun VerticalDivider(modifier: Modifier Modifier,thickness: Dp DividerDefaults.Thickness,color: Color DividerDefaults.color)纵向分割线HorizontalDivider( modifier Modifier color Color(0xFF77BAF7), thickness 3.dp )五、空白区域 Spacer一个空白区域使用 Modifier 的 width、height、size 来设置大小。Spacer( modifier Modifier .width(10.dp) //宽 .height(10.dp) //高 .size(10.dp) //同时设置宽高正方形 )六、圆形进度条 ProgressIndicatorCircularProgressIndicator( progress 0.6F, //控制进度不传参会一直转 modifier Modifier, color Color.Magenta, //圈圈颜色 strokeWidth 5.dp //圈圈厚度 )七、条形进度条 LinearProgressIndicatorLinearProgressIndicator( progress 0.8F, //控制进度不传参会一直流动 modifier Modifier, color Color.Red, //进度颜色 trackColor Color.Blue //剩余颜色 )八、列表条目 ListItemListItem( modifier Modifier, headlineText { Text(text headline) }, overlineText { Text(text overline) }, supportingText { Text(text supporting) }, leadingContent { Text(text leading) }, trailingContent { Text(text trailing) }, )

相关新闻

服务器端调用客户端硬件设备解决方案

服务器端调用客户端硬件设备解决方案

流程: 1、客户端使用java 开发 WebSocket服务,以实现调用设备端接口。 2、服务器端程序通过 WebSocket通讯调用客户端本地设备,实现具体操作。 举例:服务器端(为简单验证用,临时搭建) 源码下载地…

2026/9/25 5:05:56 阅读更多 →
HMIMaker轻量级组态上位机实战指南:产线可用的Modbus RTU/TC

HMIMaker轻量级组态上位机实战指南:产线可用的Modbus RTU/TC

简介:HMIMaker是一款面向工业自动化领域的轻量级上位机人机界面组态软件,专为易显科技VGA工控机与工控板设计,解决工程师在HMI界面开发中代码编写复杂、调试周期长、跨设备适配难等痛点,适用于PLC/单片机系统集成、产线监控面板快…

2026/9/25 5:05:56 阅读更多 →
树莓派4B本地部署AI大模型:从Ollama到7x24小时运行实战

树莓派4B本地部署AI大模型:从Ollama到7x24小时运行实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/25 5:04:56 阅读更多 →

最新新闻

Atlas 300V推理卡实战:CANN环境搭建与YOLO模型转换部署全攻略

Atlas 300V推理卡实战:CANN环境搭建与YOLO模型转换部署全攻略

先回答那个很多人问过我、也是搜索热度一直不低的直接问题:Atlas 300V 24G,到底算不算一张运算加速卡?算,但你不把它理解成"推理加速卡",后面部署模型时一定会被各种概念绕晕。它和常说的 NVIDIA 训练卡、图…

2026/9/26 8:00:06 阅读更多 →
PS图片出血扩展插件Image Extend:印刷出血边距自动填充实战指南

PS图片出血扩展插件Image Extend:印刷出血边距自动填充实战指南

简介:这是一款面向Photoshop用户的出血扩展插件,专为解决印刷设计中图片出血不足、边缘留白等问题而开发。插件支持自动扩展背景、精确设置出血尺寸、保留边框元素及多层处理,适合海报、宣传册、名片等印刷品设计场景,尤其适合需要…

2026/9/26 8:00:06 阅读更多 →
从0到1搭建可落地的AI Agent工程实践

从0到1搭建可落地的AI Agent工程实践

1. 项目概述:这不是一个“玩具Demo”,而是一条通往真实业务的流水线“从 PPT 到生产”——这六个字,是我过去三年在十多个AI项目里踩坑、复盘、再推翻后,最痛也最实在的总结。太多团队卡在“能跑通”和“能干活”之间那道看不见的…

2026/9/26 8:00:06 阅读更多 →
WorkBuddy+Flask+SQLite:从零搭建日更内容站点的实战指南

WorkBuddy+Flask+SQLite:从零搭建日更内容站点的实战指南

1. 为什么我选择 WorkBuddy Flask SQLite 这套组合1.1 从零建站的真实需求拆解先说清楚我要做的事:从零搭一个能日更的内容站点,不需要花哨的前端框架,不需要复杂的运维体系,核心诉求就三个——能快速上线、能持续更新、能自己掌…

2026/9/26 8:00:06 阅读更多 →
针对老化测试 CSV 数据(老化时间序列 + Ice/Vce/Tc/Tj/NTC 等数值)的数据清洗插值算法完整实现与最佳实践

针对老化测试 CSV 数据(老化时间序列 + Ice/Vce/Tc/Tj/NTC 等数值)的数据清洗插值算法完整实现与最佳实践

以下是针对老化测试 CSV 数据(老化时间序列 + Ice/Vce/Tc/Tj/NTC 等数值)的数据清洗插值算法完整实现与最佳实践。 老化测试数据属于不均匀时间序列(采集间隔可能不固定,存在缺失/NaN/异常值),推荐优先使用 线性插值(简单、快速、物理意义合理),对于需要更平滑曲线的…

2026/9/26 8:00:06 阅读更多 →
心脏病数据分析系统:Java全栈实战拆解与重难点解析

心脏病数据分析系统:Java全栈实战拆解与重难点解析

心脏病数据分析系统这类项目,本质上是一个典型的 Java 全栈实战案例,但又不完全是“增删改查脚手架”。它真正的技术含量集中在统计聚合、关联分析、可视化报表和医疗数据的处理细节上。如果你是因为找毕设参考、做技术练手、或者想转行医疗信息化方向而…

2026/9/26 7:59:06 阅读更多 →

日新闻

数据库课后习题答案别硬背:当测试用例集刷,效率翻倍

数据库课后习题答案别硬背:当测试用例集刷,效率翻倍

简介:万常选版《数据库原理与设计》课后习题答案资源,覆盖第2至6章及第9章,适合正在学习关系模型、数据库建模、关系数据理论与模式求精的本科生、自学者作为复习与自测材料。压缩包共7个文件,含3个doc参考答案、2个sql示例脚本、…

2026/9/26 0:00:25 阅读更多 →
学校官网模拟全流程实践:从页面布局到后端接口与部署

学校官网模拟全流程实践:从页面布局到后端接口与部署

如果你正在找一门 Web 大作业的题目,或者刚开始接触 Web 前端开发想做点能拿来展示的东西,“学校官网模拟”几乎是最稳的选择。题目看着简单,但要把导航、新闻列表、轮播 Banner、二级页面、后台数据都串起来,其实已经把前端布局、…

2026/9/26 0:00:25 阅读更多 →
超级玛丽游戏源码C++:从零搭建横版跳跃游戏工程

超级玛丽游戏源码C++:从零搭建横版跳跃游戏工程

简介:这是一份面向游戏开发初学者与C进阶学习者的超级玛丽(超级马里奥)游戏源码,基于C面向对象编程实现,适合想通过经典项目理解游戏主循环、角色类设计、地图关卡加载与物理碰撞检测的读者参考。压缩包共49个文件&…

2026/9/26 0:00:25 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/25 19:27:14 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/25 11:15:26 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/25 20:29:09 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/25 20:29:43 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/25 20:29:31 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/25 19:27:26 阅读更多 →