Compose 使用fillMaxWidth-fraction百分比显示不全
compose
compose - Docker Compose是一个用于定义和运行多容器Docker应用程序的工具,通过Compose文件格式简化应用部署过程。
项目地址:https://gitcode.com/gh_mirrors/compose/compose

·
前言
起因是这样的,我在做底部导航栏过程中,需要等比例排列每个item,于是我用了fillMaxWidth
函数去定制item宽度,却遇到了第一个item能展示一半,第二个item展示不全的问题。
先看下fillMaxWidth
函数:
大致解读一下,这个函数需要传入一个 0.0-1.0 的一个百分比(fraction
),也就是说传入的百分比是当前item在父容器内的占比,我写了如下代码:
.fillMaxWidth(1 / tabSize.toFloat())
当前我的item个数是2个,以下代码在tabSize的情况下遍历调用。按照预期就会得到两块等比例的排列,像图中这样:
但其实我得到了如下模样:
这就比较迷惑了对吧,进入源码开始查看
排查问题
compose
compose - Docker Compose是一个用于定义和运行多容器Docker应用程序的工具,通过Compose文件格式简化应用部署过程。
项目地址:https://gitcode.com/gh_mirrors/compose/compose
我们当前的fraction
的值两个都是 0.5,于是进入 createFillWidthModifier(fraction)
,可以看到这个函数最终调用了 FillModifier(...)
/**
* @param fraction The fraction of the maximum width to use, between `0` and `1`, inclusive.
*/
fun Modifier.fillMaxWidth(/*@FloatRange(from = 0.0, to = 1.0)*/ fraction: Float = 1f) =
this.then(if (fraction == 1f) FillWholeMaxWidth else createFillWidthModifier(fraction))
private val FillWholeMaxWidth = createFillWidthModifier(1f)
private fun createFillWidthModifier(fraction: Float) = FillModifier(
direction = Direction.Horizontal,
fraction = fraction,
inspectorInfo = {
name = "fillMaxWidth"
properties["fraction"] = fraction
}
)
找到答案
查看 FillModifier
,文档有这样一句描述出乎了预料
The maximum width that the measurement can take, in pixels.
译文:测量可以采用的最大宽度,以像素为单位。
也就是说,并非如初想象的那样(每个view各占父容器的一半宽度),而是当前view占父容器内剩余可用宽度的一半,说白了就是第一个item排列后占用了一半宽度,第二个item就只能用剩下的一半作为最大宽度了,所以第二个item传入的宽度是一半的一半,依次类推如果三四个item都会持续更小。
解决
问题找到了,解决办法就很简单了,假设当前5个item,会得到结果 1/5=0.2,每个item占0.2。
总宽度在每放置一个item后就减小一个item的宽度,总比例逐个减小,于是得到以下代码:
OK,到此结束,下次再见!
推荐内容
阅读全文
AI总结




compose - Docker Compose是一个用于定义和运行多容器Docker应用程序的工具,通过Compose文件格式简化应用部署过程。
最近提交(Master分支:7 个月前 )
8e2f799c
Signed-off-by: dufucun <dufuchun@sohu.com>
1 天前
2a84dfec
Bumps [golang.org/x/crypto](https://github.com/golang/crypto) from 0.32.0 to 0.35.0.
- [Commits](https://github.com/golang/crypto/compare/v0.32.0...v0.35.0)
---
updated-dependencies:
- dependency-name: golang.org/x/crypto
dependency-version: 0.35.0
dependency-type: indirect
...
Signed-off-by: dependabot[bot] <support@github.com> 2 天前
更多推荐
相关推荐
查看更多
compose

compose - Docker Compose是一个用于定义和运行多容器Docker应用程序的工具,通过Compose文件格式简化应用部署过程。
compose

分享compose模板,方便新人,老手快速部署docker容器,注释特别多,不懂看注释和最上方的链接,文字量巨大,劝退预警XD,懒得建站建博客,直接拿github当博客lol
Compose

Nice and simple DSL for Espresso Compose UI testing in Kotlin
热门开源项目
活动日历
查看更多
直播时间 2025-04-09 14:34:18

樱花限定季|G-Star校园行&华中师范大学专场
直播时间 2025-04-07 14:51:20

樱花限定季|G-Star校园行&华中农业大学专场
直播时间 2025-03-26 14:30:09

开源工业物联实战!
直播时间 2025-03-25 14:30:17

Heygem.ai数字人超4000颗星火燎原!
直播时间 2025-03-13 18:32:35

全栈自研企业级AI平台:Java核心技术×私有化部署实战
目录
所有评论(0)