news 2026/7/11 14:35:17

Compose 基础 - 其它设置、资源获取

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Compose 基础 - 其它设置、资源获取

二、对齐方式 Alignment

2.1 平面方向(2D)

TopStartTopCenterTopEnd
CenterStartCenterCenterEnd
BottomStartBottomCenterBottomEnd

2.2 线性方向(1D)

2.2.1 设置 verticalAlignment

Top
CenterVertically
Bottom

2.2.2 设置 horizontalAlignment

StartCenterHorizontallyEnd

三、排列方式 Arrangement

Top垂直放置子元素,使他们尽可能的靠近顶部。效果:上123###下
Bottom垂直放置子元素,使他们尽可能的靠近底部。效果:上###123下
Start水平放置子元素,使他们尽可能的靠近起点。效果:左123###右(自动适配国际化)
End水平放置子元素,使他们尽可能的靠近终点。效果:左###123右(自动适配国际化)
Center子元素靠近中心挤着。效果:##123##(自动适配国际化)
SpaceBetween头尾子元素分布在两端,其余平均分布剩下空间。效果:1##2##3(自动适配国际化)
SpaceAround头尾子元素离两段占半个间隔,其余子元素分布剩下空间。效果:#1##2##3#(自动适配国际化)

3.1 设置 verticalArrangement

3.2 设置 horizontalArrangement

四、缩放方式 ContentScale

不像 ImageView 的 ScaleType 把缩放和对齐合在一起操作,Image 分成了2个不同的属性:alignment 和 contentScale。

  • 对于头像:考虑使用 Alignment.Top 避免脸部被裁切,避免 FillBounds 出现扭曲变形。
  • 对于背景:使用Crop,避免 Fit 出现难看的留白。
  • 对于产品图:需要完整显示使用 Fit。
  • 对于表情包:不要放大小图片 Inside。
  • 对于像素风格、游戏元素图:不修改像素,None。
  • 图片大于容器时,Fit 和 Inside 效果相同,图片小于容器时,Fit会放大,Inside不会。
缩放模式说明
None 无不修改像素。
Inside 内部可以看到整张图,但周围可能会有留白,图比容器小不会被放大。
Crop 裁剪居中填充容器,允许边缘被裁剪。
Fit 适应可以看到整张图,但周围可能会有留白。
FillHeight 填充高度图片高度匹配容器,宽度会留白或裁剪。
FillWidth 填充宽度图片宽度匹配容器,高度会留白或裁剪。
FillBounds 填充边界填充所有区域不留白,允许图像拉伸变形。

4.1 总结一(谷歌)

纵向图片横向图片
原始图片
Fit
Crop
FillHeight
FillWidth
FillBounds
Inside

来源图片大于边界

来源图片大于边界

来源图片小于边界

来源图片小于边界

None

来源图片大于边界

来源图片大于边界

来源图片小于边界

来源图片小于边界

4.2 总结二(我的)

模式图片
宽高 > 屏幕宽高 < 屏幕宽 > 屏幕高 > 屏幕
不缩放

None

居中显示

裁剪超出部分

居中显示

四周留白

纵向:留白

横向:裁剪

纵向:裁剪

横向:留白

等比缩放

Inside

内部

超出控件更长的边:匹配

超出控件较短的边:留白

居中显示

四周留白

纵向:留白

横向:匹配

纵向:匹配

横向:留白

Crop

裁剪

超出控件更长的边:裁剪

超出控件较短的边:匹配

超出控件更长的边:裁剪

超出控件较短的边:匹配

纵向:匹配

横向:裁剪

纵向:裁剪

横向:匹配

Fit

适应

超出控件更长的边:匹配

超出控件较短的边:留白

超出控件更长的边:匹配

超出控件较短的边:留白

纵向:留白

横向:匹配

纵向:匹配

横向:留白

FillHeight

填充高度

纵向:缩小到匹配

横向:剪裁或留白

纵向:拉伸到匹配

横向:裁剪或留白

纵向:匹配

横向:裁剪

纵向:匹配

横向:留白

FillWidth

填充宽度

纵向:剪裁或留白

横向:缩小到匹配

纵向:裁剪或留白

横向:拉伸到匹配

纵向:留白

横向:匹配

纵向:裁剪

横向:匹配

不等比缩放

FillBounds

填充边界

宽高按各自比例拉缩小到匹配宽高按各自比例拉伸到匹配

纵向:拉伸后匹配

横向:缩小后匹配

纵向:缩小后匹配

横向:拉伸后匹配

缩放模式等比缩放留白可能性内容被裁剪
None不缩放可能可能
Inside
Crop
Fit
FillHeight可能可能
FillWidth可能可能
FillBounds
显示整个图片(无裁切)吗是,图比容器小吗是,不希望被放大,None
否,我不在乎,Fit
否,需要容器被完全填满吗是,允许拉伸变形吗是,FillBounds
否,Crop
宽度保持一致,FillWidth
高度保持一致,FillHeight
别动我的像素,None

4.3 总结三(网络)

下方图片:bigger = 图片宽高都比控件大,smaller=图片宽高都比屏幕小,taller = 图片高于控件高度,longger = 图片宽于控件宽度。参考文章

4.4 结合 Modifier.aspectRadio() 使容器宽高比一致

可以获得形状一致的容器,并且图像可以通过 Crop 完美填充容器。这套组合非常适合用于主图、卡片和媒体播放器。

Image( painter = painterResource(R.drawable.hero), contentDescription = null, contentScale = ContentScale.Crop, modifier = Modifier .fillMaxWidth() .aspectRatio(16f / 9f) //强制容器宽高比 16:9 )

五、资源文件 Resource

官方文档

避免使用定编码的方式,尺寸详见屏幕适配,颜色详见自定义主题。

5.1 尺寸 dimens.xml

val smallPadding = dimensionResource(R.dimen.padding_small) Text( text = "...", modifier = Modifier.padding(smallPadding) )

5.2 颜色 colors.xml

//painterResource 可在主线程中解码并解析资源的内容。 Divider(color = colorResource(R.color.colorGrey))

5.3 字符串 strings.xml

Text( text = stringResource(R.string.compose) ) //字符串复数 // <plurals name="runtime_format"> // <item quantity="one">%1$d minute</item> // <item quantity="other">%1$d minutes</item> // </plurals> Text( text = pluralStringResource(R.plurals.runtime_format, quantity, quantity) ) //字符串数组 //<string-array name="navLabels"> // <item>主页</item> // <item>消息</item> // <item>个人</item> //</string-array> val navLabels = stringArrayResource(id = R.array.navLabels)

5.4 图片 drawable

Icon( painter = painterResource(id = R.drawable.ic_logo), contentDescription = null )

六、文字样式 TextStyle

参考文章

constructor( color: Color = Color.Unspecified, //文字颜色 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, //阴影 textAlign: TextAlign? = null, //对齐方式 textDirection: TextDirection? = null, //装饰(下划线、中划线) lineHeight: TextUnit = TextUnit.Unspecified, //行高 textIndent: TextIndent? = null )

七、透明度 Alpha

取值范围 0f-1f,默认1f。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/11 14:33:56

Win11下VMware配置Ubuntu虚拟机的完整指南

1. 环境准备&#xff1a;VMware与Ubuntu镜像下载 在Windows 11上玩转Ubuntu虚拟机&#xff0c;首先得准备好两样东西&#xff1a;VMware Workstation Pro和Ubuntu系统镜像。我推荐使用VMware 16 Pro版本&#xff0c;这个版本对Win11的兼容性最好&#xff0c;实测运行稳定不卡顿…

作者头像 李华
网站建设 2026/7/11 14:32:35

QuTiP量子计算工具包安装配置指南

QuTiP量子计算工具包安装配置指南 【免费下载链接】qutip QuTiP: Quantum Toolbox in Python 项目地址: https://gitcode.com/gh_mirrors/qu/qutip 需求定位&#xff1a;选择适合你的安装路径 在开始安装QuTiP前&#xff0c;需要根据用户类型和使用场景选择合适的安装方…

作者头像 李华
网站建设 2026/7/11 14:33:49

Coding Plan技术解析:AI编程时代的成本优化与效率革命

一、Coding Plan的本质&#xff1a;从Token经济到订阅制革命在AI编程领域&#xff0c;传统按Token计费模式正面临效率与成本的双重挑战。以OpenClaw为例&#xff0c;单个中等复杂度开发任务需20-50轮对话&#xff0c;消耗数万Token&#xff0c;单任务成本达数元至数十元。对于日…

作者头像 李华
网站建设 2026/7/3 2:51:35

选第一个Linux发行版前,必想的5个关键问题

作为一名专注开源生态与桌面创新的科技自媒体博主,我经常收到粉丝私信:“哥,我终于下定决心试试Linux了,但面对几百个发行版,我该从哪个开始?” 没错,Linux的自由在于“百花齐放”,但对新人来说,选择恐惧症才是最大的拦路虎。今天这篇文章,就帮你系统讲解在挑选第一…

作者头像 李华
网站建设 2026/7/11 14:33:25

QT 5.6.1虚拟键盘在arm-linux上的实现与优化

1. 为什么要在ARM-Linux上实现QT虚拟键盘&#xff1f; 在嵌入式设备开发中&#xff0c;用户输入一直是个头疼的问题。想象一下&#xff0c;你正在开发一款智能家居控制面板或者工业手持终端&#xff0c;设备没有物理键盘&#xff0c;但用户又需要输入文字——这时候虚拟键盘就成…

作者头像 李华
网站建设 2026/6/30 7:22:21

Shader编程纹理采样的耗时定量分析 ——一次采样到底有多慢?我们用数字说话

每一个图形程序员都听过这句话: “纹理采样很贵,要尽量减少。” 但"很贵"到底是多贵?贵到什么程度?比一次加法贵多少?比一次乘法贵多少?比一次pow运算贵多少? 你问十个程序员,可能得到十个模糊的回答:“大概贵个几倍吧”“反正比数学运算慢”“看情况”。…

作者头像 李华