I have a reading app that allows the user to change the text's font, size and color. She can choose from up to 3 fonts, 5 sizes and 4 colors.

How would you organize your styles?

Since I can't set a custom font as a style (AFAIK), my styles will be restricted to just the sizes and colors.

My first thought was that I'd have a style that inherited from TextAppearance.AppCompat to start.

<style name="MyText" parent="TextAppearance.AppCompat" />  

Then I would have 5 styles for the sizes.

<style name="MyText.ExtraSmall">  
    <item name="android:textSize">@dimen/extra_small_reading_text</item>
</style>

<style name="MyText.Small">  
    <item name="android:textSize">@dimen/small_reading_text</item>
</style>

<style name="MyText.Medium">  
    <item name="android:textSize">@dimen/medium_reading_text</item>
</style>

<style name="MyText.Large">  
    <item name="android:textSize">@dimen/large_reading_text</item>
</style>

<style name="MyText.ExtraLarge">  
    <item name="android:textSize">@dimen/extra_large_reading_text</item>
</style>  

Then I'd have 20 styles that inherit from each size.

<style name="MyText.ExtraSmall.Light">  
    <item name="android:textColor">@color/light_reading_text</item>
</style>

<style name="MyText.ExtraSmall.Dark">  
    <item name="android:textColor">@color/dark_reading_text</item>
</style>

<style name="MyText.ExtraSmall.Blue">  
    <item name="android:textColor">@color/blue_reading_text</item>
</style>

<style name="MyText.ExtraSmall.Sepia">  
    <item name="android:textColor">@color/sepia_reading_text</item>
</style>

<!-- 4 styles for Small-->

<!-- 4 styles for Medium-->

<!-- 4 styles for Large-->

<!-- 4 styles for ExtraLarge-->

I would then set the text style to one of the 20 MyText.Size.Color styles, and set the font programmatically.

That is a lot of styles. Not to mention, it's optimzied for changing font size, but not color. That is, if I want to change the medium font size I can change it once and it is changed for all the colors, but if I want to change the light text color I'd have to change it in 5 places. There seems like there has to be a better way.

Do you know of one?

Please share.

Thanks!