TZ0*_*Z04 17 text-width android-jetpack-compose
我正在开发一个基于 Jetpack Compose 的应用程序,它显示一个包含 3 列的简单列表。
\n\n一切都在原则上进行。我正在努力解决的是如何自动确定列的大小。
\n例如,日期列的宽度要求将根据用户的区域设置和字体大小而显着不同。
\n24.12.2021 - 20:00需要的屏幕空间比
12/14/2021 - 08:00 PM。
我希望我能做的是使用示例日期,根据当前的区域设置和字体大小对其进行测量,然后相应地设置所有列表条目的宽度。
\n与此类似的东西:
\nval d = Date(2021, 12, 30, 23, 59, 59) // Sample date\nval t = dateFormat.format(d) + " - " + timeFormat.format(d) // Build the output string\nval dateColumnWidth = measureTextWidth(t, fontSize) // This is what I need\n\n\xe2\x80\xa6\nLazyColumn {\n\xe2\x80\xa6\nRow {\n Text(text = t, Modifier.width(dateColumnWidth.dp), fontSize = fontSize.sp))\n Text(text = value)\n Text(text = comment)\n }\n} \n\xe2\x80\xa6\nRun Code Online (Sandbox Code Playgroud)\n我已经研究这个问题好几个星期了,但是像上面的“measureTextWidth”这样的函数似乎不存在。
\n有什么办法可以实现这一点吗?
\nPhi*_*hov 31
SubcomposeLayout你可以这样使用:
@Composable
fun MeasureUnconstrainedViewWidth(
viewToMeasure: @Composable () -> Unit,
content: @Composable (measuredWidth: Dp) -> Unit,
) {
SubcomposeLayout { constraints ->
val measuredWidth = subcompose("viewToMeasure", viewToMeasure)[0]
.measure(Constraints()).width.toDp()
val contentPlaceable = subcompose("content") {
content(measuredWidth)
}[0].measure(constraints)
layout(contentPlaceable.width, contentPlaceable.height) {
contentPlaceable.place(0, 0)
}
}
}
Run Code Online (Sandbox Code Playgroud)
然后在你的视图中使用它:
MeasureUnconstrainedViewWidth(
viewToMeasure = {
Text("your sample text")
}
) { measuredWidth ->
// use measuredWidth to create your view
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10199 次 |
| 最近记录: |