Search code examples
kotlintext-size

How to change text size from OnCreate using code in Kotlin


I have an activity which have Spinner and TextView. I want to use the Spinner to change the text size in TextView. there is three size in spinner(small, mediam and large) I put these size in dimen.xml .. how can I use Spinner to Change size? I tried this code but it didn't work

val fontSize = arrayOf("large", "medium", "small")

    spinner.adapter = ArrayAdapter(this, android.R.layout.simple_spinner_dropdown_item, fontSize)
    spinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener{
        override fun onNothingSelected(parent: AdapterView<*>?) {
        }

        override fun onItemSelected(parent: AdapterView<*>?, view: View?, position: Int, id: Long) {
            when(position){
                0 -> {
                    textView.textSize = R.dimen.font_large.toFloat()
                }
                1 ->{
                    textView.textSize = R.dimen.font_medium.toFloat()
                }
                2 ->{
                    textView.textSize = R.dimen.font_small.toFloat()
                }
            }
        }
    }

Solution

  • You have to change your when. R.dimen.font_large.toFloat() return you wrong value.

    You have to get R.dimen.font_large from resources:

    when (position) {
        0 -> R.dimen.font_large
        1 -> R.dimen.font_medium
        2 -> R.dimen.font_small
        else -> null
    }?.let {
        textView.textSize = resources.getDimension(it)
    }
    

    And in dimens.xml you have to store values with sp:

    <?xml version="1.0" encoding="utf-8"?>
    <resources>
        <dimen name="font_small">10sp</dimen>
        <dimen name="font_medium">20sp</dimen>
        <dimen name="font_large">30sp</dimen>
    </resources>