【问题标题】:How to convert TextUnit to Dp in Jetpack Compose?如何在 Jetpack Compose 中将 TextUnit 转换为 Dp?
【发布时间】:2021-01-25 23:39:34
【问题描述】:

我知道它们之间的区别。我想根据lineHeight 计算文本heightlineHeight 的值在TextUnit,所以我想把它转换成Dp

【问题讨论】:

    标签: android android-layout kotlin android-jetpack android-jetpack-compose


    【解决方案1】:

    您需要从LocalDensity 中获取当前的Density——所以这只能在@Composable 函数中的合成中起作用——并使用它来转换为Dp

    val lineHeightSp: TextUnit = 12.sp
    val lineHeightDp: Dp = with(LocalDensity.current) {
         lineHeightSp.toDp()
    }
    

    【讨论】:

      【解决方案2】:

      我为此使用了这些全局函数:

      功能:

      @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()
          )
      

      【讨论】:

        【解决方案3】:
        private fun Int.textDp(density: Density): TextUnit = with(density) {
            this@textDp.dp.toSp()
        }
        
        val Int.textDp: TextUnit
            @Composable get() =  this.textDp(density = LocalDensity.current)
        

        【讨论】:

          猜你喜欢
          • 2021-05-01
          • 2023-01-22
          • 2021-08-12
          • 2022-10-23
          • 2017-04-10
          • 1970-01-01
          • 2022-11-16
          • 2021-11-01
          • 2021-12-02
          相关资源
          最近更新 更多