androidkotlinandroid-jetpack-composefont-scaling

Prevent system font scaling - Jetpack Compose


I am trying to restric the app from affected fro system font scaling. I had gone through many solutions but none helped. Most of them tell use dp instead of sp for text sizes but in compose we can use only sp if i am right as it expects a Text Unit. Is there any right way to restrict font scaling in our app done with jetpack compose ? Please help .

(Solutions refered) : https://l.workplace.com/l.php?u=https%3A%2F%2Fstackoverflow.com%2Fquestions%2F21546805%2Fhow-to-prevent-system-font-size-changing-effects-to-android-application&h=AT0zIuBPbUONm0T6q8PtqbxCdX6P_ywlp-yFGrqPMqZt7H3wsWYltKO5XwbW3i0lenrxxLi3nn_kMO4aPtFUfig2iG0BcRZpd0wTuZ1_XFpdsjDM6E7RPyZ-G_c2dlmuzGqsSEHYbqBJun0hLLZgOpRUszKbe9-1xQ


Solution

  • You can have an extension for Int or Float like this

    @Composable
    fun Int.scaledSp(): TextUnit {
        val value: Int = this
        return with(LocalDensity.current) {
            val fontScale = this.fontScale
            val textSize =  value / fontScale
            textSize.sp
      }
    

    You can add an extension parameter of Int

    val Int.scaledSp:TextUnit
        @Composable get() =  scaledSp()
    
    Text(text = "Hello World", fontSize = 20.scaledSp)