【发布时间】:2021-01-25 23:39:34
【问题描述】:
我知道它们之间的区别。我想根据lineHeight 计算文本height。 lineHeight 的值在TextUnit,所以我想把它转换成Dp。
【问题讨论】:
标签: android android-layout kotlin android-jetpack android-jetpack-compose
我知道它们之间的区别。我想根据lineHeight 计算文本height。 lineHeight 的值在TextUnit,所以我想把它转换成Dp。
【问题讨论】:
标签: android android-layout kotlin android-jetpack android-jetpack-compose
您需要从LocalDensity 中获取当前的Density——所以这只能在@Composable 函数中的合成中起作用——并使用它来转换为Dp:
val lineHeightSp: TextUnit = 12.sp
val lineHeightDp: Dp = with(LocalDensity.current) {
lineHeightSp.toDp()
}
【讨论】:
我为此使用了这些全局函数:
功能:
@Composable
fun Float.dp() = with(LocalDensity.current) { Dp(this@dp).toSp() }
@Composable
fun Int.dp() = with(LocalDensity.current) { Dp(this@dp.toFloat()).toSp() }
用法:
Text(
text = lorem(2),
color = Color.Red, maxLines = 1000, fontSize = 20f.dp()
)
【讨论】:
private fun Int.textDp(density: Density): TextUnit = with(density) {
this@textDp.dp.toSp()
}
val Int.textDp: TextUnit
@Composable get() = this.textDp(density = LocalDensity.current)
【讨论】: