Search code examples
androidwear-osandroid-textview-autosizeandroid-wear-3.0wear-tile

autoSizeTextType property for wear LayoutElementBuilders.Text


In Android wear TileService we have to use LayoutElementBuilders.Text for displaying Text. In xml we can use autoSizeTextType for TextView.

How can i apply this property in LayoutElementBuilders.Text for wear TileService ?

I didn't find any method in the Builder.


Solution

  • Here i am sharing my solution to solve my problem.

    Requirement was not to change font size when user change display font size from setting.

    For fixed size i have to use font size in dp in dimen file like 20dp.

    In DimensionBuilders.SpProp.Builder class method setValue expect value in sp.

    In LayoutElementBuilders.FontStyle.Builder class method setSize expect SpProp.

    So i have to calculate a scale factor and multiply with dp value.

        fun getScaleFactorForDp(context: Context) : Float {
            return (1.0f/context.resources.configuration.fontScale)
        }
    
    
        fun getSpProp(context: Context, @DimenRes dimensionId: Int, scaleFactor : Float = 1f): DimensionBuilders.SpProp {
            val spValue = (context.resources.getDimension(dimensionId) / context.resources.displayMetrics.density) * scaleFactor
            return DimensionBuilders.SpProp.Builder()
                .setValue(spValue)
                .build()
        }
    
       -------------------------------------------------     
        
        val scaleFactor = getScaleFactorForDp(context)
        LayoutElementBuilders.FontStyle.Builder()
            .setSize(getSpProp(context, R.dimen.text_size,scaleFactor))
            ....
            build()