Search code examples
androidcoding-style

How to change text style based on state with XML?


StateListDrawables and <selector> are great for setting different drawables for each state of a view, but is there a way to tie in what text style that view should use for each of those states?

For example, if you had a button that was white with black text, and when clicked, the button color became black, you would want your text color to change to white. I can imagine how I would do this with code, but is there a way to do it with XML similar to the <selector> used for drawables?


Solution

  • Well there sort of is. I don't believe there is a way to say, something like state_focused use Bold or italics or fontSize = 20. But there are ways to change the color. So using the selector mechanic you can create a ColorStateList

    http://developer.android.com/reference/android/content/res/ColorStateList.html

    Basically you do the same thing as you would a state list drawable using a selector except that you can place a color inside the individual items. Then you save your XML inside the color folder.

    /res/values/color/my_stateful_color.xml

    and set the android:textColor to "@color/my_stateful_color"